Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie rekordów z tabeli A których ID nie ma w tabeli B
Forum PHP.pl > Forum > Bazy danych
adbacz
Załóżmy taką sytuację:

TABELA A
  1. user_id | login | firstname
  2. 1 | admin | Adam
  3. 2 | user | Karol
  4. 3 | men | Marcin


TABELA B
  1. user_id | verified | sum
  2. 2 | 1 | 428


Jak zapytać serwer, by zwróciło mi tylko te rekordy, które są w w TABELI A, ale nie ma ich w TABELI B?
nospor
do tabeli A robisz LEFT JOIN tabeli B a potem w warunku WHERE robisz: WHERE TabelaB.user_id is null
adbacz
Nie zwraca danych tak jakbym tego chciał.

  1. SELECT * FROM `#__user` LEFT JOIN `#__schoolvirtualdiary_pupils`
  2. ON (`#__schoolvirtualdiary_pupils`.`id_user` > 0) WHERE `#__user`.`range` = '$pupilRange' AND `#__user`.`id` != `#__schoolvirtualdiary_pupils`.`id_user`


W kolumnie `#__user`.`range` jest przechowywana ranga użytkownika i potrzebuje pobrać użytkowników tylko tej rangi.

Ogólnie to zapytanie powinno brzmieć: Pobierz użytkowników z tabeli #__user oraz #__schoolvirtualdiary_pupils tak, że ich ranga jest równa $pupilRange oraz tak, że nie ma ich jeszcze w tabeli #__schoolvirtualdiary_pupils. Czyli na zbiorze $result = #__user \ #__schoolvirtualdiary_pupils;
nospor
w ON laczy sie dwie tabele ze sobą, a ty tego nie robisz.
w WHERE miales dac is NULL i tez tego nie widze.
adbacz
Ok, poradziłem sobie. Zapytanie wygląda ta:

  1. SELECT * FROM `#__user` LEFT JOIN `#__schoolvirtualdiary_pupils` ON (`#__user`.`id` = `#__schoolvirtualdiary_pupils`.`id_user`) WHERE `#__user`.`range` = '$pupilRange' AND `#__schoolvirtualdiary_pupils`.`id_user` IS NULL


Przeczytałem gdzieś, że można zrobić jeszcze tak, i też działa:

  1. SELECT * FROM `#__user` WHERE `#__user`.`range` = '$pupilRange' AND `#__user`.`id` NOT IN (SELECT `id_user` FROM `#__schoolvirtualdiary_pupils`)
nospor
Tylko ze druga wersja prawdopodobnie dluzej sie wykonuje
Pyton_000
Możesz też zrobić zwykłe Join
  1. SELECT
  2. *
  3. FROM
  4. `#__user`
  5. JOIN
  6. `#__schoolvirtualdiary_pupils` ON (`#__user`.`id` = `#__schoolvirtualdiary_pupils`.`id_user`)
  7. WHERE
  8. `#__user`.`range` = '$pupilRange'
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.