Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z odczytem danych z tabeli.
Forum PHP.pl > Forum > Przedszkole
jerico
Szukam od 2 dni odpowiedzi i nie potrafię rozwiązać następującego problemu.
Poniższy kod jak widać odczytuje zawartość tabel. Problem polega na tym, że błędnie wyświetlana jest druga kolumna wiersza (zaznaczona przez pogrubienie, funkcja printf()). Na początku myślałem, że źle zapisano zapytanie mysql ale następne dwa $wynik3 i $wynik4 są zbudowanie na tej samej zasadzie a wyniki wyświetlają się prawidłowo.
Błąd polega na tym, że nazwy firm generowane się w niezrozumiały dla mnie sposób.

Tabela user u
id | nazwa
1 | aaa
2 | bbb
3 | ccc

Tabela harmonogram h
nr zlecenia | idcompany | produkt | etap
1 | 1 | 3 |1
2 | 2 | 1 |3
3 | 1 | 5 |8
4 | 3 | 4 |3
5 | 3 | 7 |6


Wynik jest taki
1 | bbb | projdukt3 | etap1
2 | aaa | projdukt1 | etap3
3 | aaa | projdukt5 | etap8
4 | ccc | projdukt4 | etap3
5 | ccc | projdukt7 | etap6

Oczywiście jest jeszcze tabela produkt i etap zbudowane tak jak user.

Nie rozumie skąd taka kolejność ? Dlaczego jest to niezgodne z zapytaniem, w którym wskazuje, że h.idcompany = u.id. Jeszcze raz powtórzę dane z kolumny produkt i etap są generowane na tej samej zasadzie i wszystko jest ok.
Nie mogę rozgryźć jak/na jakiej podstawie generowana jest kolejność w tablicy asocjacyjnej dla zmiennej $firma

$wynik = mysql_query("select * from harmonogram");
$wynik2 = mysql_query("select company from harmonogram h, users u where h.idcompany = u.id");
$wynik3 = mysql_query("select produkt from produkt p, harmonogram h where p.id_produkt = h.product");
$wynik4 = mysql_query("select nazwa from etap e, harmonogram h where e.id_etap = h.etap");

$rec = mysql_num_rows($wynik);

for ($i=0; $i <$rec; $i++) {
$wiersz = mysql_fetch_array($wynik);
$firma = mysql_fetch_array($wynik2);
$produkt = mysql_fetch_array($wynik3);
$etap = mysql_fetch_array($wynik4);

printf('
<tr valign="top" align="left").'">
<td> <font class="small_font2">'.$wiersz["nr_zlecenia"].'</font></td>
<td> <font class="small_font2">'.$firma["company"].'</font></td>
<td> <font class="small_font2">'.$produkt["produkt"].'</font></td>
<td> <font class="small_font2">'.$etap["nazwa"].'</font></td>
</tr>
');
nospor
po pierwsze: uzywaj BBCODE
po drugie: to ze w tabeli widzisz dane w pewnej kolejności to nie znaczy ze pobrane z bazy też będą miały taką kolejność. Do określenia kolejności słuzy ORDER BY
po trzecie: 4 zapytania by to wyswietlic? Słyszałeś o łączeniu tabel (LEFT JOIN)? To powinienes zrobic jednym zapytaniem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.