Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie w zapytaniu?
oSa
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.04.2003

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


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ć ) ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
ins@ne
post
Post #2





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 10.07.2003
Skąd: Poznań

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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...
Go to the top of the page
+Quote Post
oSa
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.04.2003

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

wykonawcy : id | nazwa | opis
produkcje : id | wykonawca_id | nazwa | opis
Go to the top of the page
+Quote Post
damians
post
Post #4





Grupa: Zarejestrowani
Postów: 91
Pomógł: 1
Dołączył: 27.12.2003
Skąd: z łodzi

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


ok poszło wielkie dzieki
Go to the top of the page
+Quote Post
oSa
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 29.04.2003

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


Cytat
ok poszło wielkie dzieki



WTF?? OCB?? Co jest? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
ins@ne
post
Post #6





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 10.07.2003
Skąd: Poznań

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


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





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 24.02.2003
Skąd: Gliwice

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


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





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) wykonawców, których ID znajduje się w tabeli produkcje, czyli mają coś "na koncie" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jeżeli nie ma żadnych to nie zwróci nic.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:53