Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Zmniejszenie wartosc rekordu
Forum PHP.pl > Forum > Przedszkole
kamilo818
Pewnie coś banalnego ale nie moge tego przejść

Chce zmniejszyć wartość rekordu w tabeli o ilość zakupionego towaru
  1. mysql_query("UPDATE produkty_info SET ilosc = 'ilosc'-$ilosc WHERE id='$nr' AND kolor='$kolor' AND rozmiar='$rozmiar'");
  2. mysql_query("UPDATE produkty SET ilosc_kupionych = 'ilosc_kupionych'+$ilosc WHERE nr='$nr'");


Jak zwiększenie ilości kupinych działa bez zarzutu to zmniejszenie nie.
Mam to w pętli i w zalezności od ilości kupinych towarów. Jeśli jes to 1 rodzaj przedmiotu w ilości np 4 szt i mam na stanie 100 sztuk to po operacji mam stan -4 (minus cztery).

Jesli natomiast mam np 4 rodzaje przedmiotów po 4 szt i kazda na stanie ma po 100 szt to po operacji mam: -4, 96, 96 ,96.

pole w bazie jest INT i zmienna $ilosc też jest int.

Co jest nie tak?
nospor
'ilosc' - tekst ilosc
ilosc - kolumna ilosc
`ilosc` - kolumna ilosc

Ciebie chyba interesuje zmiana wartosci kolumny ilosc a nie tekstu ilosc, nieprawdaż?
kamilo818

  1. mysql_query("UPDATE produkty_info SET ilosc = ilosc-$ilosc WHERE id='$nr' AND kolor='$kolor' AND rozmiar='$rozmiar'");
  2.  


tak tez daje ten sam rezultat.
nospor
Ale przynajmniej operacja jest zrobiona prawidlowo....

Skoro ci nic nie zmienia, znaczy ze ten warunek
id='$nr' AND kolor='$kolor' AND rozmiar='$rozmiar'
nie jest spelniony dla zadnego rekordu.
Po co dodajesz tam kolor i rozmiar? Samo ID nie wystarczy?
kamilo818
Bo rekordów od id takich samych jest kilka a różnią sie kolorem i rozmiarem.
Np bluza niebieska rozmiar L i bluza różowa rozmiar M maja taki sam id a rożne kolory i roz.

Ale do rzeczy.
Ale tak jak pisałem w 1 poście wartością ilośc sie zmieniają ale nie prawidłowo.
nospor
wybacz, nie doczytalem.

Bledne zmiany na pewno bylo powodem 'ilosc'.
Jesli nadal masz bledy i nadal dokladnie te same, to pokaz kod po zmianach włącznie z tą petlą, bo moze i tam cos napsules
kamilo818
  1. foreach ($_SESSION['koszyk'] as $key => $val) {
  2. $photo = $val['photo'];
  3. $id_produktu = $val['nr'];
  4. $nazwa = $val['nazwa'];
  5. $kolor = $val['kolor'];
  6. $rozmiar = $val['rozmiar'];
  7. $ilosc = intval($val['ilosc']);
  8. $cena = $val['cena'];
  9. mysql_query("INSERT INTO zamowienia_produkty (login, id_zamowienia, id_produktu, nazwa, ilosc, kolor, rozmiar, cena, photo) VALUES ('$login' ,'$id_zamowienia', '$id_produktu', '$nazwa', '$ilosc', '$kolor', '$rozmiar', '$cena', '$photo')");
  10.  
  11. mysql_query("UPDATE produkty_info SET ilosc = ilosc-$ilosc WHERE id='$id_produktu' AND kolor='$kolor' AND rozmiar='$rozmiar'");
  12. mysql_query("UPDATE produkty SET ilosc_kupionych = ilosc_kupionych+$ilosc WHERE nr='$id_produktu'");
  13.  
  14. }
nospor
No dobra, i jaki jest teraz dokladnie problem? Bo teraz kod jest ok.
kamilo818
Od początku ten sam.
Na stanie mam 100 szt produktu danego rodzaju. Kupuje 4 tego produktu. Odejmuje te 4. I powinno zostac w ilosci 96. A w tabeli zostaje -4.

W przypadku kilku produktów różych rodzajów . Gdy kupuje na 4 po 4 sztuki z każdego. Wynikiem jest -4, 96,96,96. Czyli 3 się dobrze odejmą a 1 zle.
nospor
Nie mozliwe. To nie moze sie zachowywac tak samo źle gdy zamiast ilosc miales 'ilosc'
Albo to sie gdzies jeszcze wykonuje, albo te zmienne $ilosc mają dziwe wyniki. Sprawdzales?
kamilo818
  1. mysql_query("UPDATE produkty_info SET ilosc = $ilosc WHERE id='$id_produktu' AND kolor='$kolor' AND rozmiar='$rozmiar'");


to się elegancko wykonuje i wartości $ilosc ładnie się uploadują do bazy.
Coś z tym odejmowaniem chyba nie tak jest :/
  1. ilosc = ilosc-$ilosc


Można by było to obejść, najpierw odczytać wartość pola ilosc z bazy i wykonać odejmowanie a sam wynik updatowac do bazy. Ale to kolejne zapytanie do bazy. I w sumie to poprzednie zapytanie powinno działać.
nospor
To z tego w niosek ze w bazie masz takie wartosci:
0
100
100
100
smile.gif

Ewentualnie jeden produkt w tabeli $_SESSION['koszyk'] masz powielony wieleeeee razy. Prosilem byś sprawdził, ale ciągle jestem w tej kwestii olewany.
kamilo818
w bazie mam wartosci 100, 100, 100 ,100.

Nie olewam smile.gif
Element w tablicy nie jest powielany. Każdy tylko 1 raz wystepuje.


Dobra znalazłem. Wcześniej faktycznie zostawiłem błędny kod który wpisuje -4 do tablicy. Omg i tyle czasu straciłem tongue.gif

Dzięki.
mmmmmmm
  1. UPDATE produkty_info pi JOIN produkty p ON p.nr=pi.id SET p.ilosc_kupionych = p.ilosc_kupionych+$ilosc , pi.ilosc = pi.ilosc-$ilosc WHERE pi.id='$id_produktu' AND pi.kolor='$kolor' AND pi.rozmiar='$rozmiar'");
kamilo818
Cytat(mmmmmmm @ 9.10.2014, 07:19:24 ) *
  1. UPDATE produkty_info pi JOIN produkty p ON p.nr=pi.id SET p.ilosc_kupionych = p.ilosc_kupionych+$ilosc , pi.ilosc = pi.ilosc-$ilosc WHERE pi.id='$id_produktu' AND pi.kolor='$kolor' AND pi.rozmiar='$rozmiar'");


Dzięki. Nie rozumiem zapytania do końca, ale działa smile.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.