![]() |
![]() |
![]()
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ć ) ? |
|
|
![]() |
![]()
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... |
|
|
![]()
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 |
|
|
![]()
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
|
|
|
![]()
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) |
|
|
![]()
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... |
|
|
![]()
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... |
|
|
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:53 |