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> ");
}
}
}
}
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?