Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak to poprawnie połączyć?
Forum PHP.pl > Forum > Bazy danych > MySQL
zdemotywowany


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ś?

pmir13
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

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.