Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Problem z odczytem danych z tabeli., Błędny wynik zapytania MYSQL
jerico
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 22.11.2009

Ostrzeżenie: (0%)
-----


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>
');
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 09:23