Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie towaru pod pewnymi warunkami
Forum PHP.pl > Forum > Bazy danych > MySQL
okoolarnik
Witam.

Mam (oczywiście jest ich więcej, ale mówię tylko o tych) dwie tabele w bazie danych :

orders oraz orders_products.

W tabeli orders jest kilka kolumn, lecz mnie interesują dwie :

orders_id oraz orders_status.

W tabeli orders_products jest też kilka kolumn, lecz mnie interesują cztery :

orders_id, products_model, products_name oraz products_quantity.

Niestety nie mogę sobie poradzić z tematem, żeby :

Zczytać dane razem z tych tabel, a następnie wyświetlić je na stronie w następujący sposób :

Po 1 .
- Wiadomo że do jednego numeru zamówienia (orders_id)mogą być przyporządkowane różne produkty (products_model, products_name, products_quantity). Chodzi o to, żeby produkty wyświetlały się jeśli status zamówienia (orders_status) do którego należą równa się np. 2 (jeśli różny od 2 nie mają się wyświetlać).
Po 2.
- Produkty w różnych zamówieniach mogą się powtarzać, i chodzi o to, żeby nie był ten produkt wyświetlony ponownie, lecz wartości pola products_quantity dla takich samych products_model były sumowane.
Po 3.
- Nie interesuje mnie wyświetlanie pola orders_id przy produktach, ale wydawało mi się, że dzięki tym polom można porównać wiersze.

Znajomy mówił coś o krzyżowych zapytaniach do bazy MySql4, ale nic z tego nie kumam.
Błagam pomóżcie, bo się już dawno pogubiłem.
KILIUSZKIN
Ad1.
  1. SELECT op.products_model, op.products_name, op.products_quantity ---
  2. FROM orders_products op, orders o ---
  3. WHERE o.order_id = op.order_id AND o.order_status = 2 ---


Ad2.
  1. SELECT op.products_model, op.products_name, sum(op.products_quantity) ---
  2. FROM orders_products op, orders o ---
  3. WHERE o.order_id = op.order_id AND o.order_status = 2 ---
  4. GROUP BY op.products_model. op.products_name ---


Sumowanie masz po modelu a potem po nazwie. Nie możesz sumować tylko po modelu, jeśli chcesz
wyświetlać model i nazwę.

Ad3.
Jak wyżej, kolumna order_id nie musi być wyświetlana
okoolarnik
Mam coś takiego :
  1. <?php
  2.  
  3. $host =***
  4. $username =***
  5. $password =***
  6. $database =***
  7.  
  8. $polaczenie = mysql_connect($host, $username, $password);
  9. mysql_select_db($database, $polaczenie);
  10.  
  11. $zapytanie = "select op.products_model, op.products_name, sum(op.products_quantity) from orders_products op, orders o where o.order_id = op.order_id and o.ord
    er_status = 2 group by op.products_model. op.products_name"
    ;
  12. $dzialaj=mysql_query($zapytanie);
  13.  
  14. while ($pole = mysql_fetch_row($dzialaj))
  15.  
  16. {
  17. print $pole[0].' - '.$pole[1].' - '.$pole[3].' - '.$pole[4].'<br>';
  18. }
  19.  
  20. php?>


Niestety przeglądarka podaje mi komunikat

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/site/14509/www/dostawa/dostawa.php on line 14

questionmark.gif?
KILIUSZKIN
Literówki, literówki.....
  1. <?php
  2. $zapytanie ="select op.products_model, op.products_name, sum(op.products_quantity)
  3. from orders_products op, orders o where o.order_id = op.order_id and o.order_sta
    tus = 2 group by op.products_model, op.products_name"
    ;
  4. ?>


Oczywiście zapytanie w jednej linii...
okoolarnik
Zmieniłem, niestety nadal to samo
KILIUSZKIN
Po
  1. <?php
  2. $dzialaj=mysql_query($zapytanie);
  3. ?>

dodaj
  1. <?php
  2. $sql_error = mysql_error();
  3. if (!($sql_error=="")) {
  4.  echo "<center><br><br><b> Zapytanie do bazy danych nie powiodło się </b>";
  5.  echo "<b> $sql_error </b></center>";
  6.  die();}
  7. ?>


i podaj jaki błąd ci wyświetla
okoolarnik
Zapytanie do bazy danych nie powiodło się Unknown column 'o.order_id' in 'where clause'
KILIUSZKIN
Kolejna literówka (tym razem z mojej strony), powinno być:
where o.orders_id = op.orders_id .....

guitar.gif
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.