Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Update tabeli jezeli spełnony zostanie warunek z drugiej tabeli
Forum PHP.pl > Forum > Przedszkole
wrc1000
Witam

Prosze o podpowiedź.

Mam do zrealizowania zadanie zmiany wartości kolumny cena znajdującej się w tabeli prodct ale tylko w jednej kategorii (druga tabela ).

Kategorie zapisane są w 2 tabeli o nazwie category nazwa kolumny id_category
Potrzebuje zmienić ceny w kategori 3.


Tworze zapytanie które jednak zmienia mi wszystkie ceny w całej bazie.


update product SET product.cena =product.cena+5 WHERE category.id_category=3

Gdzie błąd ?
zulus
Jaki jest schemat bazy danych (relacji między tymi tabelami)
wrc1000
Nie wiem dokładnie o co chodzi gdzie to sprawdzę ?



Podpowie ktoś ? Szukam i nic nie mogę znaleźć
lobopol
W jaki sposób wpisy z tabeli product wiedzą, że są w kategorii o id 3?
Czy w tabeli product masz kolumnę category_id która wskazuje na tabelę category?
Jeżeli tak to
  1. UPDATE product SET cena = cena+5 WHERE id_category=3

używaj bbcode na przyszłość
wrc1000
Problem w tym ze w tabeli product nie ma kolumny id_category

Jedyna kolumna która występuje w obu tabelach to product_id
nospor
http://dev.mysql.com/doc/refman/5.0/en/update.html
Masz tam napisane jak operować w update na kilku tabelach
Cytat
UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;
Wystarczy, że dostosujesz do swoich tabel i dodasz jeszcze warunek na kategorie 3
wrc1000
Dzięki za info. Będę testował



Zrobiłem tak ze dodalem to porownanie product_id i dodatkowy warunek ustalajacy kategorie

  1. UPDATE product, category_product SET product.price=(product.price-(product.price*10)/100) WHERE product.id_product=category_product.id_product AND category_product.id_category = 1


I to zadziałało.

i teraz pytanie. Czy zawsze gdy chce zrobic update jednej tabeli w oparciu o dane z drugiej musze dokonac takiego porownania jak w przypadku product_id ?

No i dlaczeog zapytanie

  1. UPDATE product, category_product SET product.price=(product.price-(product.price*10)/100)
  2. WHERE category_product.id_category = 1


robi update dla wszystkich cen z kazdej kategorii. Tak łopatologicznie jeżeli mogę prosić smile.gif
nospor
Cytat
Czy zawsze gdy chce zrobic update jednej tabeli w oparciu o dane z drugiej musze dokonac takiego porownania jak w przypadku product_id ?
Nie, nie musisz. Teraz musiałeś bo jedno pole nazywało się category_id a tego mysql nie toleruje...... wink.gif

Oczywiście że musisz.

Cytat
robi update dla wszystkich cen z kazdej kategorii.
Bo nie zrobiłeś powiązania miedzy tabelami.

Zrób sobie select z dwóch dabel bez powiązania ich w where a zobaczysz ze dostaniesz zdecydowanie wiecej danych niż oczekiwales.
wrc1000
no tak smile.gif dzieki
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.