Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykluczenie rekordów
Forum PHP.pl > Forum > Bazy danych > MySQL
Zakrn
Zaćmiło mnie chyba... Mam problem z ułożeniem zapytania, które z wierszy jednej tabeli wykluczy te, w których jedno z pól znajduje się wśród wartości w jedym z pól w drugiej tabeli.

Wycinek pierwszej tabeli, z której pobierane są dane:
`teachers`
teacher_id | surname | firstname
i wycinek drugiej tabeli:
`classes`
class_id | teacher

Przy czym `teacher` w tabeli `classes` ma ustawiony indeks UNIQUE i jest odpowiednikiem dla `teacher_id`.

Z tych dwóch table chcęwygenerować wszystkei wiersze z `teachers`, w których wartość `teacher_id` nie ma swojego odpowiednika w `classes`.

Mam nadzieję, że wyjaśniłem to jasno (czasami zdarza mi się gmatwać).

Dziekuję z góry za pomoc!
Parti
  1. SELECT * FROM teachers WHERE teacher_id NOT IN (SELECT teacher_id FROM classes)


Dodam, ze mysql 4.1.x w pelni obsluguje podzapytania. Z wczesniejszymi wersjami moga byc klopoty.
Zakrn
No właśnie... Niestety na serwerze mam dostęp tylko do 4.0.14. Czy można to w zrobić w inny sposób?
halfik
no jak nie masz do dyspozycji podzapytan, to moze sprobuj tak: wyciagnij dane z tabeli 1, pozniej jedziesz po nich whil'em, a w nim wykonujesz zapytanie do tabeli 2 i jesli wynik bedzie wiekszy niz 0 wierszy, to znaczy ze rekord mamy w 2 tabeli, jesli rowny 0, to znaczy ze nie, a wowczas mamy jeden z interesujacych nas wierszy i przykladowo "upychamy" jego dane do jakies tablicy|tablic i tak do konca.

  1. <?php
  2.  
  3. $query = 'SELECT * FROM tabela1';
  4. $result = @mysql_query($query);
  5.  
  6. while($data = @mysql_fetch_array($result)){
  7. $query = &#092;"SELECT * FROM tabela 2 WHERE teacher='$data[teacher_id]'\";
  8. $sResult = @mysql_query($query);
  9. $checkRow = @mysql_num_rows($sResult);
  10. if($checkRow == 0){
  11. // tutaj cos robimy z tymi danymi
  12. }
  13. } 
  14.  
  15.  
  16. ?>
Zakrn
Halfik, dzięki, zrobienie tego w php to nie problem, ale chodziło mi o przyśpieszenie całości.

Mam jeszcze jedno pytanie - jak poradzić sobie z polskimi znakami w mysql 5? Przestawiłem na latin2_general_ci, i dalej mam znaki zapytania... Moze bazy danych trzeba czymś przekonwertować z 4.0.x na 5?
DeyV
A może dałoby się jakoś tak?
  1. SELECT * FROM teachers LEFT JOIN classes ON ( teachers . teacher_id = classes. teacher )
  2. WHERE classes.class_id 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-2025 Invision Power Services, Inc.