Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka tabel - jedno zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Snoopy
Witam. Mam taki mały problem... grzebie już tu na forum od jakiegos czasu ale nie moge wygrzebac nic sensownego. Mam takie tabelki:
  1. tabela1
  2. id | nazwa |
  3. 1 | nazw1 |
  4. 2 | nazw2 |
  5. 3 | nazw3 |
  6.  
  7. tabela2
  8. id | katalog | id_tab2
  9. 1 | 1 | 1
  10. 2 | 1 | 2
  11. 3 | 1 | 3
  12. 4 | 2 | 2
  13. 5 | 2 | 3


  1. <?php
  2. echo '<select name='lista'>';
  3. $lista = mysql_query("SELECT tabela1.nazwa, tabela1.id FROM tabela1, tabela2 WHERE tabela2.katalo
    g='2' AND tabela1.id!=tabela2.id_tab2"
    );
  4. while ($_row = mysql_fetch_assoc($lista)) {
  5. echo '<option value=''.$_row['id'].'' >'.$_row['nazwa'];
  6. }
  7. echo '</select>';
  8. ?>


Chodzi o to żeby w liscie rozwijalnej pojawily sie dane tabela1.nazwa ale za wyjątkiem tych których id jest zawarte w tabeli2.id_tab2 przy tabela2.katalog=2

Pisze to bo kod jest błędny i od razu nie wiadomo o co mi chodzi.
Czyli na chłopski rozum, najepierw powinienem wyciagnac tylko te rekordy tabeli tabela2 gdzie katalog=2 czyli w wyniku powinienem otrzymac id_tab2=2 i 3 no i pozniej wyswietlic rekordy tabeli tabela1 gdzie id=2 i 3

Niestety otrzymuję albo tylko 1 zamiast 2 i 3 albo wszystko po kilka sztuk 1,1; 2,2,2; 3,3,3

Mogę liczyć na pomoc jak poprawnie napisać zapytanie MySQL? Zaznaczam, że chciałbym to zrozumieć a nie tylko przepisać i dalej nie wiedzieć jak działa.
batman
Ciężko było mi zrozumieć co i skąd ma zostać wyciągnięte winksmiley.jpg ale chyba się udało. Pisane z palce, więc może być mały babol winksmiley.jpg

  1. SELECT * FROM tabela1 WHERE id IN (SELECT id_tab FROM tabela2 WHERE katalog = 2)
Snoopy
dzięki za szybką odpowiedź ale coś chyba jest nie tak bo lista jest pusta :/ w moim przypadku przynajmniej się coś pojawiało smile.gif

  1. <?php
  2. select * from tabela1 where id in (select id_tab from tabela2 where katalog = 2)
  3. ?>

czy to oznacza (pomijając poprawność) że tabela1.id = (select id_tab from tabela2 where katalog = 2)?


----
przepraszam, poprawka, zadziałało ale wyświetliło tylko jeden rekord
no i kurcze chodziło mi o to żeby wyświetliło wszystko poza tymi ktore sa w tabeli2 przypisane do katalog=2

czyli tak jak np w wideotece chce wiedziec jakie filmy gość zabrał ze sobą to ja chce wiedzieć jakich filmów nie wziął
batman
  1. SELECT * FROM tabela1 WHERE id NOT IN (SELECT id_tab FROM tabela2 WHERE katalog = 2)
Snoopy
Dzięki wielkie! Takie konkretne odpowiedzi to rzadkość.
Jeszcze raz dziękuję.
fx69
Wlasnie pisze pewien skrypt i mialem podobny problem. Znalazlem ten temat i mysle sobie: dar z nieba snitch.gif
wklepuje go w reczne odpalanie skryptow sql w bazie i... wywala blad o bledzie skladni blink.gif. Moj sql jest praktycznie identyczny z zapytaniem snoopy'ego:

  1. SELECT * FROM gracze WHERE nick NOT IN (SELECT gracz1, gracz2 FROM teams)


edit.

chyba znalazlem rozwiazanie:
  1. SELECT g.nick, t.gracz1, t.gracz2 FROM gracze AS g, teams AS t WHERE nick != t.gracz1 AND nick != t.gracz2


nie usuwam posta, bo a nuż widelec komus sie to przyda smile.gif
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.