Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wykluczenie rekordów
Zakrn
post 30.07.2004, 13:59:16
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 20.09.2003

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


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!
Go to the top of the page
+Quote Post
Parti
post 30.07.2004, 14:19:14
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 22.07.2004

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


  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.

Ten post edytował Parti 30.07.2004, 14:20:06
Go to the top of the page
+Quote Post
Zakrn
post 30.07.2004, 14:22:53
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 20.09.2003

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


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?
Go to the top of the page
+Quote Post
halfik
post 30.07.2004, 16:14:14
Post #4





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 17.05.2003
Skąd: Nysa

Ostrzeżenie: (10%)
X----


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


--------------------


"Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski)
dev: gazeta.ie
Go to the top of the page
+Quote Post
Zakrn
post 30.07.2004, 16:23:51
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 20.09.2003

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


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?
Go to the top of the page
+Quote Post
DeyV
post 30.07.2004, 23:28:59
Post #6





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




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


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post

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: 13.07.2025 - 22:41