Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie w zapytaniu?
Forum PHP.pl > Forum > Bazy danych > MySQL
oSa
Tworzę stronę, gdzie w bazie danych przechowuję informacje o artystach i ich produkcjach. Potrzebuję na stronie wyświetlić Artystów, a pod nimi produkcje, które wydali. Wykonując takie zapytanie:


[php:1:95ec50eff5]<?php
$ayt = mysql_query("SELECT * FROM wykonawcy order by nazwa");

while ($b=mysql_fetch_array($ayt))
{
echo "<font size="4"><a href="?d=wykonawcy&wid=$b[id]">$b[nazwa]</a></font><br><br>";
$utw = mysql_query("select * from produkcje where wyk_id='$b[id]'");
while ($c=mysql_fetch_array($utw))

{

echo "<li><a href="?d=produkcje&pid=$c[id]"><i>$b[nazwa] - $c[nazwa]</i></a><br>";
}

}
?>[/php:1:95ec50eff5]


otrzymuje wszystkich artystów ( nawet tych, którzy nie wydali ani jednej płyty ). Jak zapytać się tylko o tych artystów, którzy coś wydali ( no i oczywiście ich wyświetlić ) ?
ins@ne
Trudno jest mi sie polapac w tym twoim kodzie... ale jesli chcesz na poziomie SQLa wybrac wykonawcow, ktorzy cos wydali to zapytanie powinno wygladac tak:
[sql:1:0c3859c4ce]select * from Wykonawcy where Produkcje not NULL[/sql:1:0c3859c4ce]
albo jesli ustawiales 0 jesli ktos nie ma zadnej produkcji to:
[sql:1:0c3859c4ce]select * from Wykonawcy where Produkcje != 0[/sql:1:0c3859c4ce]
(ew. zamiast != moze byc <> - nigdy nie pamietam w jakim jezyku jak jest biggrin.gif)

Nie wiem czy tak masz zbudowana swoja baze w kazdym razie Wykonawcy to nazwa relacji (tabeli), a Produkce to nazwa argumentu (kolumny) przechowujacego liczbe wydanych plyt czy cokolwiek...
oSa
Cytat
Nie wiem czy tak masz zbudowana swoja baze w kazdym razie Wykonawcy to nazwa relacji (tabeli), a Produkce to nazwa argumentu (kolumny) przechowujacego liczbe wydanych plyt czy cokolwiek...


Właśnie, struktura jest troszkę inna smile.gif

wykonawcy : id | nazwa | opis
produkcje : id | wykonawca_id | nazwa | opis
damians
ok poszło wielkie dzieki
oSa
Cytat
ok poszło wielkie dzieki



WTF?? OCB?? Co jest? tongue.gif
ins@ne
ok... to powinno byc tak:
[sql:1:b79e529b67]select * from Wykonawcy left outer join Produkcje on Wykonawcy.Id=Produkcje.Wykonawca_id where nazwa not null[/sql:1:b79e529b67]

Glowy w sumie za to nie dam bo left outer joiny zawsze troche "na chybil trafil" robie... ale jak zrobilem sobie analogiczny przyklad u mnie w bazie to zadzialal...

Teoretycznie: polacza sie dwie tabele opierajac sie na Id=Wykonawcy.Id; left outer join spowoduje ze z pierwszej (lewej) tabeli wszystko "przejdzie" laczenie, a z drugiej tylko to co spelnia warunek (Id=Wykonawcy.Id); jesli pierwsza tabela nie bedzie miala swoich odpowiednikow po prawej stronie (czyli artysta nic nie wydal) to te pola zostana wypelnione NULLami; zatem wybieramy jakiekolwiek z tych pol i robimy warunek, ze np. nazwa czy opis czy Produkcje.id nie moze byc NULL...
polaczek
Kod
$ayt = mysql_query("SELECT * FROM wykonawcy ORDER BY nazwa");

while ($b=mysql_fetch_array($ayt))

{

   $utw = mysql_query("SELECT * FROM produkcje WHERE (wyk_id="$b[id]") ");

if(mysql_num_rows($utw)>0){

  echo "<font size="4"><a href="?d=wykonawcy&wid=$b[id]">$b[nazwa]</a></font><br>";

  while ($c=mysql_fetch_array($utw))

  {

  

  echo "<li><a href="?d=produkcje&pid=$c[id]"><i>$b[nazwa] - $c[nazwa]</i></a><br>";

  }

}

}

pisze jeszcze zeby zamknac temat;P odpowiedzialem mu juz na privie bo pytal...
spenalzo
Cytat
wykonawcy : id | nazwa | opis
produkcje : id | wykonawca_id | nazwa | opis

Hmm to może tak:
[sql:1:5293cbc691]SELECT w.* FROM wykonawcy w, produkcje p WHERE p.wykonawca_id=w.id [/sql:1:5293cbc691]
To zwróci (powinno smile.gif ) wykonawców, których ID znajduje się w tabeli produkcje, czyli mają coś "na koncie" smile.gif Jeżeli nie ma żadnych to nie zwróci 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-2024 Invision Power Services, Inc.