Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie danych z dwoch tabel jednoczesnie
Forum PHP.pl > Forum > Bazy danych > MySQL
spit
Czesc,
Chce pobierac z dwoch tabel [biografia i muzycy] dane jednoczesnie [w jednym zapytaniu]. Napisalem taki kod:
  1. <?php
  2. SELECT a.*, SELECT b.* as muzycy FROM biografia a LEFT JOIN muzycy b ON (a.nazlnk = b.zespol)
  3. ?>
lecz niestety nie dziala, nie wiem co jest zle. Dane maja odpowiadac sobie w nast. sposob biografia.nazlnk = muzycy.nazwisko. Co robie zle?
mokry
  1. SELECT a.*, b.* FROM a LEFT JOIN b ON a.nazlnk = b.zespol;
spit
Nie wiem, nie dziala.

Wiec napisalem sobie taki kod:
  1. SELECT biografia.*, muzycy.* FROM biografia, muzycy WHERE biografia.nazlnk = muzycy.nazlnk AND nazlnk='$band'
ale dostaje blad "Column 'nazlnk' in where clause is ambiguous". Jak zrobic, by to co jest wybierane mialo w tabeli 'nazlnk' to co podaje w zmiennej $band?
maryaan
musisz sprecyzowac z ktorej tabeli jest ostatni nazlnk, bo w tej chwili nie wiadomo i dlatego ww blad sie pojawia
spit
Dobra, jest tak
  1. SELECT biografia.*, muzycy.* FROM biografia, muzycy WHERE biografia.nazlnk = muzycy.nazlnk AND muzycy.nazlnk='$band'
i niby dziala, ale gdy jest wiecej niz jeden czlonek zespolu, to wszystko wyswietlane jest tyle razy ile ludzi w zespole. Jak sobie z tm poradzic?
nrm
  1. SELECT * FROM biografia b, muzycy m WHERE b.nazlnk = m.nazlnk AND m.nazlnk = '$band' GROUP BY m.costam

tak z palca. zgrupuj to wg. jakiegoś unikalnego pola. nie orientuje się co tam robisz i co chcesz ale pewnie musisz zgrupować wg. jakiegoś zespołu.
spit
Ma byc cos takiego:
Kod
Sklad
-muzyk
-muzyk
-muzyk
-muzyk

Historia zespolu
dluzszy tekst

I problem lezy w tym ze za kazdym nowym itemem 'muzyk' wyskakuje historia zespolu.
mysz
Cytat(spit @ 21.02.2007, 15:53:51 ) *
  1. SELECT biografia.*, muzycy.* FROM biografia, muzycy WHERE biografia.nazlnk = muzycy.nazlnk AND muzycy.nazlnk='$band'
i niby dziala, ale gdy jest wiecej niz jeden czlonek zespolu, to wszystko wyswietlane jest tyle razy ile ludzi w zespole.


Bo dostajesz produkt kartezjański. Nie rób "niejawnych" joinów, tylko zastosuj left join.
  1. SELECT a.*, b.* FROM a LEFT JOIN b ON b.id = a.id WHERE a.id = 'cos'
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-2024 Invision Power Services, Inc.