Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jakie zapytanie, gdy w tabeli same obce indeksy ?
Forum PHP.pl > Forum > Bazy danych > MySQL
primo
Hejka,

mam w bazie danych tabelę komentarze, w której mam 4 obce klucze (artykul_id, ksiazka_id, cytat_id, id_slowniczka). Struktura:
- comment_id
- artykul_id
- ksiazka_id
- nick
- comment
- data
- cytat_id
- id_slowniczka

comment_id jest głównym indeksem. Chcę wyciągnąć z tej tabeli najnowszych 10 komentarzy i wyświetlić je w postaci tytuł artykułu, tytuł ksiązki, cytat, hasło w słowniczku (z tym że to jest w tabelach pokrewnych, tu mam tylko klucze). Czy wobec tego powinienem najpierw wyciągnąć z tabeli komentarze te 10 najnowszych rekordów, a dopiero później stworzyć jakieś warunki if i wywoływać kolejne zapytania do kolejnych tabel w zależności jaki będzie warunek questionmark.gif Macie pomysł jak to rozwiązać questionmark.gif
arecki
  1. SELECT kom.*, ksi.tytul, art.artykul, cyt.cytat, slo.haslo FROM komentarze kom
  2. LEFT JOIN tabela_artykul art ON kom.artykul_id = art.artykul_id
  3. LEFT JOIN tabela_ksiazka ksi ON kom.ksiazka_id = ksi.ksiazka_id
  4. LEFT JOIN tabela_cytatow cyt ON kom.cytat_id = cyt.cytat_id
  5. LEFT JOIN tabela_slowniczka slo ON kom.id_slowniczka = slo.id_slowniczka
  6. ORDER BY kom.DATA DESC LIMIT 10


(niesprawdzałem czy działa smile.gif))
Tylko pamiętaj że jak masz nazwy pól w różnych tabelach takie same to musisz je zmienić poprzez np. art.artykul as trescArtykulu smile.gif
primo
A powiedz mi, które nazwy powinienem dostosować do nazw swoich w moich tabelach questionmark.gif Pierwsza linijka kodu oznacza, że wyciągam z tabeli o nazwie ksi rekord o indeksie tytul questionmark.gif Dobrze rozumiem questionmark.gif
arecki
Jak napisałem ksi.tytuł to możesz sprawdzić z zapytania do której tabeli alias 'ksi' się odnosi. W tym przypadku to tabeli ksiażek. Zasada jest prosta : po każdej nazwie tabli występuje alias oddzielony od nazwy tabeli spacją, natomiast w wyborze listy pól (czyli po słowie SELECT) występuje alias.nazwa_pola_z_tabeli_o_wybranym_aliasie. Helpa do MySQL'a poczytaj. Tam jest to dość dokładnie opisane smile.gif
primo
Cytat(arecki @ 21.02.2007, 21:04:18 ) *
Jak napisałem ksi.tytuł to możesz sprawdzić z zapytania do której tabeli alias 'ksi' się odnosi. W tym przypadku to tabeli ksiażek. Zasada jest prosta : po każdej nazwie tabli występuje alias oddzielony od nazwy tabeli spacją, natomiast w wyborze listy pól (czyli po słowie SELECT) występuje alias.nazwa_pola_z_tabeli_o_wybranym_aliasie. Helpa do MySQL'a poczytaj. Tam jest to dość dokładnie opisane smile.gif


OK.
Czy dobry jest mój tok myślenia questionmark.gif
  1. IF (!$bd->zapytaj("select kom.*, bieg_slowniczek_artykuly.artykul_tytul, bieg_slowniczek_biblioteka.ksiazka_tytul, bieg_slowniczek_cytaty.cytat_ksiazka_tytul, bieg_slowniczek.slowo from bieg_slowniczek_comment kom
  2. left join bieg_slowniczek_artykuly artykul_tytul on kom.artykul_id = art.artykul_id
  3. left join bieg_slowniczek_biblioteka ksiazka_tytul on kom.ksiazka_id = ksi.ksiazka_id
  4. left join bieg_slowniczek_cytaty cytat_ksiazka on kom.cytat_id = cyt.cytat_id
  5. left join bieg_slowniczek slowo on kom.id_slowniczka = slo.id_slowniczka order by kom.data desc limit 10 ")) {
  6. die ($bd->blad());
  7. }
arecki
No raczej nie bardzo. Przyjrzyj się mojemu zapytaniu i swojemu i zobacz różnicę.
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.