Ja mam podobny problem z tym, że chce wypisać wszystkich "klientów" i tych którzy posiadają produkt i tych którzy nie posaidają.
Żeby zobrazować o co mi chodzi:
Mam w bazie takie tabele:
A chciałbym osiągnąć taki efekt wypisywania danych:
Kod który odpowiada za wyświetlenie danych:<?php
#zapytanie do bazy w poszukiwaniu klientow
#jesli znaleziono klientów wyświetl w pętli
#===WYŚWIETLANIE KLIENTÓW START===
echo 'ID: '.$i['id'].' Klient: '.$i['imie'].' '.$i['nazwisko'];
#zapytanie do bazy w poszukiwaniu produktu 1 przypisanego do klienta
echo '<br /> Produkt1 ID: '.$j['poid'].' Opis: '.$j['opis']; }
#zapytanie do bazy w poszukiwaniu produktu 2 przypisanego do klienta
echo '<br /> Produkt2 ID: '.$k['krid'].' Opis: '.$k['kwota'].'<br />'; }
}
#===WYŚWIETLANIE KLIENTÓW KONIEC===
}
?>
Problem polega na tym, że przy 100 klientach skrypt będzie przesyłał 200 zapytań do bazy co nie jest pożądane.
Próbowałem różnych kombinacji zapytania SELECT ale nic mi się nie udawało.
Ktoś ma pomysł jak uprościć ten fragment kodu?
Z góry dziękuje za pomoc.
PS. Powyższe schematy jak i kod są uproszczone (nie ma tabel ani formatowania tekstu). Interesuje mnie tylko samo zapytanie i warunki do wyświetlenia danych.
Pozdrawiam, Zilvck
EDIT:Dla wszystkich którzy szukają podobnego rozwiązania. Na podstawie różnego rodzaju kursów metodą prób i błędów zrobiłem wszystko na jednym zapytaniu.
<?php
//zapytanie do bazy w poszukiwaniu klientow oraz przyporządkowanie do nich produktu1 i produktu2 jeśli istnieją
$sql_klient = mysql_query("SELECT * FROM klient LEFT JOIN produkt1 ON (id = poid) LEFT JOIN produkt2 ON (id = krid)") or
die(mysql_error());
//jesli znaleziono klientów wyświetl w pętli
echo 'ID: '.$i['id'].' Klient: '.$i['imie'].' '.$i['nazwisko'].'<br />'; //wyświetla użytkownika if($i['poid'])echo 'POID: '.$i['poid'].' Produkt1: '.$i['opis_poid'].'<br />'; //jeśli klient kupił produkt 1 wyświetla jego nazwę if($i['krid'])echo 'KRID: '.$i['krid'].' Produkt2: '.$i['opis_krid'].'<br />'; //jeśli klient kupił produkt 2 wyświetla jego nazwę echo '<br /><hr />'; //oddziela rekordy od siebie }
}
?>