Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] WHERE EXISTS, WHERE NOT EXISTS
Forum PHP.pl > Forum > Przedszkole
tr86
Mam pytanie odnośnie zapytania MySQL.

Chcę pobrać klientów z tabeli 'cards', którzy NIE mają zamówienia w tabeli 'orders'.
Oto kod:
  1. $zapytanie = mysql_query ("SELECT * FROM cards c WHERE NOT EXISTS
  2. (SELECT * FROM orders o WHERE c.przypisano_do = '".$_SESSION['login']."' AND c.id = o.id_card) ORDER BY `data_utworzenia` DESC")
  3. or die('błąd: '.mysql_error());


Niestety powyższe zapytanie nie działa, bo wypisuje mi wszystkich klientów bez zamówień, ale nie uwzględnia
do kogo przypisany jest klient ----> WHERE c.przypisano_do = '".$_SESSION['login']."'


Dodam jeszcze, że pobranie klientów z zamówieniami działa poprawnie.
Poniżej kod:
  1. $zapytanie = mysql_query ("SELECT * FROM cards c WHERE EXISTS
  2. (SELECT * FROM orders o WHERE c.przypisano_do = '".$_SESSION['login']."' AND c.id = o.id_card) ORDER BY `data_utworzenia` DESC")
  3. or die('bla…d: '.mysql_error());



Jakieś porady?
Z góry dziękuję.
Noidea
Zamień podzapytanie na LEFT JOINa. Powinno to wyglądać mniej więcej tak:
  1. SELECT c.*
  2. FROM cards c
  3. LEFT JOIN orders o ON ( c.id = o.id_card )
  4. WHERE o.id_card IS NULL AND c.przypisano_do = '" . $_SESSION['login'] . "'
  5. ORDER BY data_utworzenia DESC

(dla klientów z zamówieniami będzie IS NOT NULL)
Fifi209
Raczej na joina niż na left joina. wink.gif
webdice
Proszę o poprawienie tytułu.
tr86
Dziękuję bardzo. O to chodziło.
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-2025 Invision Power Services, Inc.