Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kilka tabel - jedno zapytanie
Snoopy
post
Post #1





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

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


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.
Go to the top of the page
+Quote Post
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




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)


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Snoopy
post
Post #3





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

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


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ął

Ten post edytował Snoopy 21.11.2006, 20:24:17
Go to the top of the page
+Quote Post
batman
post
Post #4





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




  1. SELECT * FROM tabela1 WHERE id NOT IN (SELECT id_tab FROM tabela2 WHERE katalog = 2)


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
Snoopy
post
Post #5





Grupa: Zarejestrowani
Postów: 92
Pomógł: 0
Dołączył: 5.02.2006

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


Dzięki wielkie! Takie konkretne odpowiedzi to rzadkość.
Jeszcze raz dziękuję.
Go to the top of the page
+Quote Post
fx69
post
Post #6





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 8.10.2006
Skąd: świat astralny

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


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

Ten post edytował fx69 23.11.2006, 15:57:04
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 Aktualny czas: 21.08.2025 - 06:25