![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Hej.
2 petle while, sciaganie rekordow z bazy danych, i co wazne, stosunek pól jeden do wielu (jeden serwis, wiele obsługiwanych marek, poprzez łączącą tabele grupas). Ma to wygladac mw. w taki sposob: serwis1 (miasto adres) auto1 auto2 auto3 serwis2 (miasto adres) auto1 auto4 Generalnie chodzi o to, zeby samochody byly wyswietlane, a nazwy serwisow i ich adresy sie nie powtarzaly. Ściągam id_grupys z tabeli serwis, na tej podstawie drukuje nazwy aut, za pomocą łączącej tabeli grupas. Niestety wewnetrzna petla przechodzi sobie raz, drukując samochody z pierwszego serwisu, a jak pojawia się nowa wartosc id_grupys, pasująca do nowego serwisu, wewnetrzna petla już nie chce się włączyć. $wiersz moze już przyjęło maksymalną wartość? Nie mam pojęcia, czemu tak sie dzieje. Oto kod: Kod $zapytanie = "SELECT * FROM serwis AS a JOIN miasto AS b ON a.id_miasta = b.id_miasta LEFT JOIN grupas AS c ON a.id_grupys = c.id_grupys LEFT JOIN auta AS d ON c.id_auta = d.id_auta"; $idzapytania = mysql_query($zapytanie); $zapytanies = "SELECT * FROM `serwis` AS a LEFT JOIN `grupas` AS c ON a.id_grupys = c.id_grupys LEFT JOIN `auta` AS d ON c.id_auta = d.id_auta ORDER BY `a`.`id_grupys`"; $idzapytanias = mysql_query($zapytanies); echo ( "<TABLE border=0><TR> <td width=200><b><left><font color=#000099>Nazwa:</b></td> <td width=90><b><left><font color=#000099>miasto:</b></td> <td width=120><b><left><font color=#000099>Adres:</b></td> <td width=120><b><left><font color=#000099 align=left> Auta:</b></td></tr> "); while ($wiersz = mysql_fetch_assoc($idzapytania)) { if ($wiersz["nazwa"] <> $nazwastara) { aby nie powtarzaly sie komorki z danymi serwisu echo( "<tr><td><left> ".$wiersz["nazwa"]."</td>"); echo( "<td><left> ".$wiersz["city"]."</td>"); echo( "<td><left> ".$wiersz["adres"]."</td>"); $idgrupys = $wiersz["id_grupys"]; // tu wlasnie przypisuje wartosc id grupy samochodow, na ktorej podstawie w petli ponizej wydrukuja mi sie auta $nazwastara = $wiersz["nazwa"]; while ($wiersz = mysql_fetch_array($idzapytanias)) //ta petla co chodzi tylko raz, a powinna za kazdym razem jak skonczy petle u gory { echo " < ".$wiersz["id_grupys"]." i ".$idgrupys." > "; // drukuje sobie czy sie zgadza wartosc wyznaczona wczesniej z ta w tabeli if ($wiersz["id_grupys"] == $idgrupys) { echo( "<td><left> ".$wiersz["auto"]."</td></tr> "); echo( "<td></td> <td></td> <td></td> "); } } } } Wyglada to tak: http://gdzieserwisowac.pl/problem.jpg niestety auta powinny sie drukowac dla kazdego serwisu, a nie tylko dla pierwszego. Pomoze mi ktos? Ten post edytował convicted 29.04.2009, 13:32:22 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 2 Dołączył: 29.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
ponieważ już raz pobrałeś wszystko co zwróciła ci baza.
Spróbuj tak zrobić Kod $zapytanie = "SELECT * FROM serwis AS a JOIN miasto AS b ON a.id_miasta = b.id_miasta
LEFT JOIN grupas AS c ON a.id_grupys = c.id_grupys LEFT JOIN auta AS d ON c.id_auta = d.id_auta"; $idzapytania = mysql_query($zapytanie); $zapytanies = "SELECT * FROM `serwis` AS a LEFT JOIN `grupas` AS c ON a.id_grupys = c.id_grupys LEFT JOIN `auta` AS d ON c.id_auta = d.id_auta ORDER BY `a`.`id_grupys`"; $idzapytanias = mysql_query($zapytanies); $arrayTmp = array(); while ($wiersz = mysql_fetch_array($idzapytanias)){ $arrayTmp[] = $wiersz; } echo ( "<TABLE border=0><TR> <td width=200><b><left><font color=#000099>Nazwa:</b></td> <td width=90><b><left><font color=#000099>miasto:</b></td> <td width=120><b><left><font color=#000099>Adres:</b></td> <td width=120><b><left><font color=#000099 align=left> Auta:</b></td></tr> "); while ($wiersz = mysql_fetch_assoc($idzapytania)){ if ($wiersz["nazwa"] <> $nazwastara) { aby nie powtarzaly sie komorki z danymi serwisu echo( "<tr><td><left> ".$wiersz["nazwa"]."</td>"); echo( "<td><left> ".$wiersz["city"]."</td>"); echo( "<td><left> ".$wiersz["adres"]."</td>"); $idgrupys = $wiersz["id_grupys"]; // tu wlasnie przypisuje wartosc id grupy samochodow, na ktorej podstawie w petli ponizej wydrukuja mi sie auta $nazwastara = $wiersz["nazwa"]; //while ($wiersz = mysql_fetch_array($idzapytanias)){ foreach($arrayTmp as $wiersz){ echo " < ".$wiersz["id_grupys"]." i ".$idgrupys." > "; // drukuje sobie czy sie zgadza wartosc wyznaczona wczesniej z ta w tabeli if ($wiersz["id_grupys"] == $idgrupys) { echo( "<td><left> ".$wiersz["auto"]."</td></tr> "); echo( "<td></td> <td></td> <td></td> "); } } } } |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 28.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie wodzu. Mam jeszcze ostatnie pytanko w sprawie mojego kodu. Otóż tabelka już całkiem całkiem - wygląda to tak .
Więc niesie to ze sobą kolejne pytanie: czy można tak pokazać wyniki, aby wiersze zapisane w ostatnich 2 kolumnach były obok siebie, a nie jedne po drugich? Kod obecny: Kod $zapytanie = "SELECT * FROM serwis AS a JOIN miasto AS b ON a.id_miasta = b.id_miasta LEFT JOIN grupas AS c ON a.id_grupys = c.id_grupys LEFT JOIN auta AS d ON c.id_auta = d.id_auta LEFT JOIN grupau AS e ON a.id_grupyu = e.id_grupyu LEFT JOIN ubezpieczyciel AS f ON e.id_ubezp = f.id_ubezp"; $idzapytania = mysql_query($zapytanie); $zapytanies = "SELECT * FROM `serwis` AS a LEFT JOIN `grupas` AS c ON a.id_grupys = c.id_grupys LEFT JOIN `auta` AS d ON c.id_auta = d.id_auta ORDER BY `a`.`id_grupys`"; $idzapytanias = mysql_query($zapytanies); $zapytanieu = "SELECT * FROM `serwis` AS a LEFT JOIN `grupau` AS c ON a.id_grupyu = c.id_grupyu LEFT JOIN `ubezpieczyciel` AS d ON c.id_ubezp = d.id_ubezp ORDER BY `a`.`id_grupyu`"; $idzapytaniau = mysql_query($zapytanieu); $arrayTmp = array(); while ($wiersz = mysql_fetch_array($idzapytanias)){ $arrayTmp[] = $wiersz; } $arrayTmp2 = array(); while ($wiersz = mysql_fetch_array($idzapytaniau)){ $arrayTmp2[] = $wiersz; } ?> <TABLE border=1 rules="all"><TR> <td width=200><b><left><font color=#000099>Nazwa:</b></td> <td width=90><b><left><font color=#000099>miasto:</b></td> <td width=120><b><left><font color=#000099>Adres:</b></td> <td width=60><b><left><font color=#000099 align=left> Auta:</b></td> <td width=100><b><left><font color=#000099 align=left> Ubezpieczyciel:</b></td></tr> <? while ($wiersz = mysql_fetch_assoc($idzapytania)){ if ($wiersz["nazwa"] <> $nazwastara) { echo( "<tr><td><left> ".$wiersz["nazwa"]."</td>"); echo( "<td><left> ".$wiersz["city"]."</td>"); echo( "<td><left> ".$wiersz["adres"]."</td>"); $idgrupys = $wiersz["id_grupys"]; $idgrupyu = $wiersz["id_grupyu"]; $nazwastara = $wiersz["nazwa"]; foreach($arrayTmp2 as $wiersz){ if ($wiersz["id_grupyu"] == $idgrupyu) { echo( "<td></td><td><left> ".$wiersz["ubezp"]."</td></tr> "); echo( "<td></td><td></td> <td></td> "); } } foreach($arrayTmp as $wiersz){ if ($wiersz["id_grupys"] == $idgrupys) { echo( "<td><left> ".$wiersz["auto"]."</td></tr> "); echo( "<td></td> <td></td> <td></td> "); } } } } pozdrawiam
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 09:51 |