Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak to poprawnie połączyć?
zdemotywowany
post 19.01.2012, 20:30:40
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 15.01.2012

Ostrzeżenie: (0%)
-----




Pierwsza tabela battles, drugi images.

Chcę wyciągnąć rekordy z images. Ale rekordy nie mają zawierać tych z WonID lub LostID. Czyli w przypadku user'a pierwszego nie powinno być takich rekordów. W przypadku user'a drugiego - 2. Problem w tym, że gdy je połączę i tworzę coś takiego:

SELECT ImageID, Filename, Caption, Score, Won, Lost FROM images, battles WHERE LostID <> ImageID AND WonID <> ImageID AND UserID = "1";

Wynik:



W wyniku nie powinien zostać wyświetlony żaden rekord, ale niestety nie mam pojęcia jak to zrobić.

Pomoże ktoś?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pmir13
post 20.01.2012, 22:00:42
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


Nie napisałeś jak te tabele są połączone, można tylko zgadywać, że WonID oraz LostID oznaczają id obrazków.
W takim wypadku najpierw trzeba znaleźć id obrazków danego usera (to co w nawiasie), a potem odjąć to co dostaniesz od całej tabeli images.
Jako że w mysql nie ma operatora MINUS to radzimy sobie kombinacją LEFT JOIN i IS NULL, a z listy obrazków dla usera wystarczą nam same id.

  1. SELECT ImageID, Filename, Caption, Score, Won, Lost FROM images
  2. LEFT JOIN
  3. ( SELECT i.imageID AS uID FROM battles b
  4. JOIN images i
  5. ON b.WonId = i.ImageID
  6. WHERE b.UserID = 1
  7. UNION SELECT i.imageID AS uID FROM battles b
  8. JOIN images i
  9. ON b.LostId = i.ImageID
  10. WHERE b.UserID = 1 ) userimages
  11. ON images.ImageId = userimages.uID
  12. WHERE userimages.uID IS NULL

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 20:38