Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Nie zapętla się while.
Oklejek
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 30.01.2012

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


Witam, mam oto taki problem, że posiadam taki kod:
  1. while($t = mysql_fetch_array($sql)) { // <<-- Ta petla wykonuje sie tylko raz
  2. if($t['shop_menu_owner'] == 0) {
  3. echo $t['shop_menu_name'].'<br>';
  4. $owner = $t['shop_menu_id'];
  5. while($t2 = mysql_fetch_array($sql)) { // <<-- Ta petla wykonuje sie tylko raz
  6. if($owner == $t2['shop_menu_owner']) {
  7. echo '->'.$t2['shop_menu_name'].'<br>';
  8. $owner2 = $t2['shop_menu_id'];
  9. while($t3 = mysql_fetch_array($sql)) { // <<-- Ta petla wykonuje sie tyle razy ile trzeba
  10. if($owner2 == $t3['shop_menu_owner']) {
  11. echo '--->'.$t3['shop_menu_name'].'<br>';
  12. }
  13. }
  14. }
  15. }
  16. }
  17. }

I oczywiście pomimo tego, że posiadam kilka różnych wpisów do mysql, zawsze dostaje tylko pierwsze znalezione wiersze:
kategoria1
->podkategoria1
--->podpodkategoria1
--->podpodkategoria2

Ktoś, może wie jak temu zaradzić?

Ten post edytował Oklejek 23.09.2016, 01:12:56
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




Kazda petla dziala na zmiennej $sql
mysql_fetch_array($sql)
Chyba sie z lekka pogubiles.


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

"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
Oklejek
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 30.01.2012

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


To już sprawdziłem, to nie ma żadnego znaczenia:
  1. $sql1 = $sql;
  2. $sql2 = $sql;
  3. while($t = mysql_fetch_array($sql)) { // <<-- Ta petla wykonuje sie tylko raz
  4. if($t['shop_menu_owner'] == 0) {
  5. echo $t['shop_menu_name'].'<br>';
  6. $owner = $t['shop_menu_id'];
  7. while($t2 = mysql_fetch_array($sql1)) { // <<-- Ta petla wykonuje sie tylko raz
  8. if($owner == $t2['shop_menu_owner']) {
  9. echo '->'.$t2['shop_menu_name'].'<br>';
  10. $owner2 = $t2['shop_menu_id'];
  11. while($t3 = mysql_fetch_array($sql2)) { // <<-- Ta petla wykonuje sie tyle razy ile trzeba
  12. if($owner2 == $t3['shop_menu_owner']) {
  13. echo '--->'.$t3['shop_menu_name'].'<br>';
  14. }
  15. }
  16. }
  17. }
  18. }
  19. }

Też nie działa
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




Cytat
To już sprawdziłem, to nie ma żadnego znaczenia:
No raczej ma, bo w kolejnych petlach zjadasz rekordy z petli poprzedniej... takie tam podstawy

$sql1 = $sql;
$sql2 = $sql;

facepalmxd.gif
Toz to jest to samo co $sql :/


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

"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
kapslokk
post
Post #5





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


Bo nadal wszystkie pętle działają na tym samym wyniku. Musiał byś liczyć wiersze w zewnętrznych pętlach i ustawiać pozycje funkcją mysql_data_seek. Chyba lepiej będzie najpierw zrobić fetch wszystkich wierszy, a później kombinować z tymi pętlami.

Ten post edytował kapslokk 23.09.2016, 09:19:10
Go to the top of the page
+Quote Post
Oklejek
post
Post #6





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 30.01.2012

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


Dzięki, udało się dzięki mysql_data_seek :
  1. $query = 'SELECT * FROM `shop_menu`';
  2. $sql = mysql_query($query);
  3. while($t = mysql_fetch_array($sql)) {
  4. if($t['shop_menu_owner'] == 0) {
  5. echo $t['shop_menu_name'].'<br>';
  6. $owner = $t['shop_menu_id'];
  7. $i = $owner;
  8. mysql_data_seek($sql, 0);
  9. while($t2 = mysql_fetch_array($sql)) {
  10. if($owner == $t2['shop_menu_owner']) {
  11. echo '->'.$t2['shop_menu_name'].'<br>';
  12. $owner2 = $t2['shop_menu_id'];
  13. $i2 = $owner2;
  14. mysql_data_seek($sql, 0);
  15. while($t3 = mysql_fetch_array($sql)) {
  16. if($owner2 == $t3['shop_menu_owner']) {
  17. echo '--->'.$t3['shop_menu_name'].'<br>';
  18. }
  19. }
  20. mysql_data_seek($sql, $i2);
  21. }
  22. }
  23. mysql_data_seek($sql, $i);
  24. }
  25. }


Ten post edytował Oklejek 23.09.2016, 21:37:36
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: 20.08.2025 - 05:06