Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dwa zapytania w jednej pętli - while?
Forum PHP.pl > Forum > Przedszkole
Kaluza
Witam mam dwie tabele ps_product i ps_product_lang
Chciałbym (w jednej pętli?) pobrać dane z obydwóch tabel.
Na razie mam coś takiego - działa.

  1. $sql="SELECT * FROM ps_product WHERE quantity>=1";
  2. $wynik=mysql_query($sql);
  3. while($rowek=mysql_fetch_array($wynik))
  4. {
  5. echo '<produkt><id_produkt>'. $rowek[id_product] .'</id_produkt><stan_magazynowy>'. $rowek[quantity] .'</stan_magazynowy><produkt_kategoria>'. $rowek[id_category_default] .'</produkt_kategoria><cena>'. round($rowek[price], 2) .'</cena><numer_ref_producenta>'. $rowek[supplier_reference] .'</numer_ref_producenta><link></link></produkt>';
  6. }


Teraz chciałbym dodać zapytanie drugie:

  1. $sql2="SELECT * FROM ps_product_lang";
  2. $wynik2=mysql_query($sql2);
  3. while($linie=mysql_fetch_array($wynik2))


i w tym samym echo, w miejscu <link></link> dodać pobrane dane:

  1. echo '<produkt><id_produkt>'. $rowek[id_product] .'</id_produkt><stan_magazynowy>'. $rowek[quantity] .'</stan_magazynowy><produkt_kategoria>'. $rowek[id_category_default] .'</produkt_kategoria><cena>'. round($rowek[price], 2) .'</cena><numer_ref_producenta>'. $rowek[supplier_reference] .'</numer_ref_producenta><link>'. $linie[product_link] .'</link></produkt>'


Czy mógłby mi ktoś pokazać jak połączyć te dwa zapytania? Próbowałem przez dwie pętle while (pętla w pętli) ale w ten sposób mam niekończącą się pętlę.
Proszę o pomoc.
Greg0
poczytaj o JOIN w zapytaniach SQL
Miszczklawiatury
Jak nie chcesz się uczyć JOINów, poniżej jest dosyć siłowe rozwiązanie korzystające tylko z php. Zapisałem wyniki Twojego drugiego zapytania w tablicy przed wykonaniem pierwszego zapytania. Rzeczy, które dodałem, są pogrubione. Powinno działać (sory, że nie zamknąłem kodu w tagach [php], ale wtedy nie działało pogrubienie :<)


$sql2="SELECT * FROM ps_product_lang";
$wynik2=mysql_query($sql2);
$i=1;
$productlang=array();

while($linie=mysql_fetch_array($wynik2)) {
$productlang[$i]=$linie[product_link];
$i++;

}

$i=1;

$sql="SELECT * FROM ps_product WHERE quantity>=1";
$wynik=mysql_query($sql);

while($rowek=mysql_fetch_array($wynik))
{
echo '<produkt><id_produkt>'. $rowek[id_product] .'</id_produkt><stan_magazynowy>'. $rowek[quantity] .'</stan_magazynowy><produkt_kategoria>'. $rowek[id_category_default] .'</produkt_kategoria><cena>'. round($rowek[price], 2) .'</cena><numer_ref_producenta>'. $rowek[supplier_reference] .'</numer_ref_producenta><link>'. $productlang[$i] .'</link></produkt>';
$i++;
}
Kaluza
Dzięki działa. Spróbuję jeszcze osiągnąć to samo za pomocą JOIN.
Dzięki za pomoc.

Ok poczytałem o tym JOIN i spróbowałem stworzyć zapytanie ale coś mi nie wychodzi:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in public_html/xml/feed.php on line 29

Linia 29:

  1. while($rowek=mysql_fetch_array($wynik2))


Cały skrypt:

  1. <?php
  2.  
  3. $polaczenie=mysql_connect("localhost","login","pass"); /* Nawiązanie połączenia z bazą */
  4. mysql_select_db("database",$polaczenie); /* Wybranie odpowiedniej bazy danych */
  5.  
  6. header('Content-type: application/xml; charset="utf-8"');
  7. echo '<?xml version="1.0" encoding="utf-8"?>';
  8. echo '<xmldata>';
  9. echo '<naglowek>';
  10. echo '<sklep_nazwa>sklep</sklep_nazwa>';
  11. echo '<sklep_id>skleppl</sklep_id>';
  12. echo '<czas>' . $dzisiaj = date("m.d.y") . '</czas>';
  13. echo '</naglowek>';
  14. echo '<kategorie>';
  15. /* IDENTYFIKACJA KATEGORII */
  16. $sql="SELECT * FROM ps_category_lang WHERE id_lang=6";
  17. $wynik=mysql_query($sql); /* Zapytanie sql do bazy i zapisanie wyniku w $wynik */
  18. while($linia=mysql_fetch_array($wynik)) /* Pętla dopóki istnieją dane */
  19. {
  20. echo '<kategoria><id_kategoria>'. $linia[id_category] .'</id_kategoria><nazwa_kategoria>'. $linia[name] .'</nazwa_kategoria><url_kategoria>http://www.adres.pl/'. $linia[id_category] .'-'. $linia[link_rewrite] .'</url_kategoria></kategoria>';
  21.  
  22. }
  23. /* KONIEC KATEGORII */
  24. echo '</kategorie>';
  25. echo '<produkty>';
  26.  
  27. /* IDENTYFIKACJA PRODUKTU */
  28.  
  29. $sql2="SELECT a.id_product, a.quanity, a.price, a.id_category_default, a.supplier_reference, b.id_product, b.link_rewrite FROM ps_product AS a LEFT JOIN ps_product_lang AS b ON a.id_product=b.id_product";
  30. $wynik2=mysql_query($sql2);
  31. while($rowek=mysql_fetch_array($wynik2))
  32. {
  33. echo '<produkt><id_produkt>'. $rowek[a.id_product] .'</id_produkt><stan_magazynowy>'. $rowek[a.quantity] .'</stan_magazynowy><produkt_kategoria>'. $rowek[a.id_category_default] .'</produkt_kategoria><cena>'. round($rowek[a.price], 2) .'</cena><numer_ref_producenta>'. $rowek[a.supplier_reference] .'</numer_ref_producenta><link>'. $rowek[b.link_rewrite] .'</link></produkt>';
  34. }
  35.  
  36. echo '<vendor></vendor>'; // producent
  37. echo '<desc></desc>'; //nazwa produktu
  38. echo '<foto></foto>'; //zdjecie produktu
  39. echo '<url></url>'; // link do produktu
  40. /* KONIEC PRODUKTU */
  41. echo '</produkty>';
  42. echo '</xmldata>';
  43. mysql_close($polaczenie);
  44. ?>


Budowa tabeli ps_product:

  1. id_product,
  2. quanity,
  3. price,
  4. id_category_default,
  5. supplier_reference.


Budowa tabeli ps_product_lang:

  1. id_product,
  2. name,
  3. link_rewrite.


Rozumiem że coś nie tak jest z zapytaniem, jak powinno poprawnie wyglądać?

Okazało się że była literówka w słowie quantity.
Jednak dalej nie działa, bo skrypt się wykonuje ciągle i zero wyników.

a.id_product zamienić na id_product i działa.
Temat do zamknięcia.
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.