Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie MySQl zwraca 0
duch4ever
post
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

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


Witam mam takie proste zapytanie:

  1. //zwraca wartosc brutto wszytkich przedm. w koszyku (bez promocji i rabatow)
  2. $suma_w_koszyku = intval(Db::getInstance()->getValue('
  3. SELECT SUM(cp.`quantity` * p.`price` + pa.`price`) * (t.`rate` / 100 + 1)
  4. FROM `'._DB_PREFIX_.'cart` c, `'._DB_PREFIX_.'cart_product` cp, `'._DB_PREFIX_.'product` p, `'._DB_PREFIX_.'tax` t, `'._DB_PREFIX_.'product_attribute` pa
  5. WHERE cp.`id_product` = p.`id_product`
  6. AND cp.`id_cart` = c.`id_cart`
  7. AND t.`id_tax` = p.`id_tax`
  8. AND cp.`id_product_attribute` = pa.`id_product_attribute`
  9. AND c.`id_cart` = '.intval($cookie->id_cart))
  10. );


Ma ono w sklepie pobrać sumę wartości przedmiotów w koszyku klienta. Wszystko dobrze zliczało ale niektóre przedmioty miały atrybuty które zwiększały cenę o daną kwotę.
Więc dodałem sobie + pa.`price` i dodatkową tabele z której bierze dane `'._DB_PREFIX_.'product_attribute` pa. Jest ok zlicza jak trzeba dodaje tą kwote jeśli przedmiot ma atrybut ale nie sumuje wartości przedmiotów które nie mają dodanych żadnych atrybutów. Czyli jeśli dodam do koszyka przedmiot bez atrybutu czyli w tabeli product_attribute nie ma wiersza z id przedmiotu który się doda zwraca 0. Myślałem że jeśli nie znajdzie wiersza doda 0 i wyświetli normalną ceną a tu zonk sad.gif Jak zrobić żeby było jak trzeba?
Go to the top of the page
+Quote Post
JohnnyB
post
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 19
Dołączył: 19.01.2010

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


Cytat
AND cp.`id_product_attribute` = pa.`id_product_attribute`


użyj join zamiast where
Go to the top of the page
+Quote Post
duch4ever
post
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

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


Zaraz będę testował. Mam jeszcze jedno pytanie odnośnie koszyka. Klient może mieć wiele koszyków, w tabeli jest id koszyka, id klienta i data dodania przedmiotu. Kiedy klient ma 2 koszyki i w każdym po 2 przedmioty sumuje mi ich wartość a chcę brać tylko z aktywnego czyli tego w którym data dodania przedmiotu jest najwyższa lub id koszyka jest najwyższe. Jak to zapisać i czy da si takie zapytanie mysql zrobić żeby pobierało ale nie ze wszystkich tylko tego gdzie id koszyka jest najwyższe.
Go to the top of the page
+Quote Post
JohnnyB
post
Post #4





Grupa: Zarejestrowani
Postów: 76
Pomógł: 19
Dołączył: 19.01.2010

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


wydaję mi się, że najsensowniej byłoby, żeby klient mógł sobie wybrać, który koszyk chce aktualnie przeglądać (np. poprzez kliknięcie na link z numerem koszyka) i wtedy robisz warunek
  1. AND id_koszyka=$id_koszyka

albo coś w tym stylu
Go to the top of the page
+Quote Post
duch4ever
post
Post #5





Grupa: Zarejestrowani
Postów: 155
Pomógł: 0
Dołączył: 22.06.2010

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


Jest to jakieś rozwiązanie, ale lepiej chyba pobiorę najpierw tą tabelę wyciągnę id koszyka i zmienną podstawie do zapytania mysql.
Go to the top of the page
+Quote Post
mkozak
post
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 4
Dołączył: 21.03.2005

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


Dużo nie musisz zmieniać, bo to nie problem joina, ani innych gramlinów.

Jeżeli nie ma atrybutu to pole pa.`price` przyjmuje wartość NULL.

  1. SELECT sum(10 + NULL) FROM dual;

daje 0

  1. SELECT sum(10 + 0) FROM dual;

daje 10

musisz jedynie zrobić transformacje null na ZERO - ifem, czy jakąś funkcją.


--------------------
==============================================
Bo ja jestem Wróbelek Htmlek
==============================================
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: 21.08.2025 - 04:00