Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]SELECT i UPDATE 3 tabel
Forum PHP.pl > Forum > Przedszkole
infer
Witam.

Zatkałem się zw temacie.

Mam trzy tabele, tak wygląda SELECT:

  1. SELECT
  2. produkty.id , produkty.nazwa
  3. FROM produkty
  4. LEFT JOIN kategorie ON produkty.prod_kat = kategorie.id
  5. LEFT JOIN comparisions ON comparisions.prod_id = produkty.id
  6. WHERE kategorie.kat_glowna = 1168


zapytanie wyświetla to co ma wyświetlać, czyli nazwy i ID produktów ze wszystkich podkategorii wchodzących do kategorii głównej 1168.

Chciałbym teraz zastosować UPDATE dla produktów spełniających powyższe kryterium , a więc


ZAPYTANIE 1) - wywala błąd
  1. UPDATE comparisions
  2. LEFT JOIN kategorie ON produkty.prod_kat = kategorie.id
  3. LEFT JOIN comparisions ON comparisions.prod_id = produkty.id
  4. SET abcd = 5
  5. WHERE kategorie.kat_glowna = 1168



UPDATE do dwóch tabel działa ok , a wygląda tak :

ZAPYTANIE 2)
  1. UPDATE comparisions
  2. LEFT JOIN produkty ON comparisions.prod_id = produkty.id
  3. SET abcd = 5
  4. WHERE produkty.prod_kat >= 1171 OR produkty.prod_kat <= 1179


Generalnie zapytanie nr 1 powinno dawać ten same rezultat co zapytanie nr 2 , ale będzie łatwiejsze w "obsłudze" bo wystarczy podać tylko id kategorii głównej i już ( nie trzeba pilnować , żeby wpisać właściwy przedział ). Prosiłbym o naprowadzenie na właściwy trop.

Dzięki
skowron-line
http://dev.mysql.com/doc/refman/5.0/en/update.html widzisz gdzieś tutaj joina w skladni questionmark.gif
Odczytujesz i jedziesz w pętli albo
  1. UPDATE tabela SET columna = "value" WHERE id IN (...)

albo w pętli no ale to ile wyników tyle zapytań
viking
Cytat(skowron-line @ 3.10.2012, 03:07:36 ) *
http://dev.mysql.com/doc/refman/5.0/en/update.html widzisz gdzieś tutaj joina w skladni questionmark.gif


Tak formalnie tylko:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference

I dalej podążając linkami:

table_reference:
table_factor
| join_table
A table reference is also known as a join expression.


ZAPYTANIE 1) - wywala błąd
Jaki to błąd?
infer
Cytat(viking @ 3.10.2012, 06:51:13 ) *
ZAPYTANIE 1) - wywala błąd
Jaki to błąd?


Zapytanie nr 1 zwraca błąd :

#1066 - Not unique table/alias: 'comparisions'

Panowie, czy możecie spłodzić dla mnie kod, niestety nic nie kumam z tego manuala:/
viking
Spróbuj zrobić alias na tej tabeli przy JOIN. LEFT JOIN comparisions c...
mmmmmmm
Wg mnie nie powinno być dwa razy comparision, tylko raz produkty
infer
Panowie i Panie smile.gif

Zacznijmy od początku.

Potrzebuję pobrać dane z 3 tabel.

Interesują mnie kolumny id , nazwa produktu oraz status dla porownywarki ceneo.

Wyrzucić ma mi produkty , które należą do kategorii głównej 1168 ( w sklad kat głównej 1168 wchodzą podkategorie - 6 sztuk o id 1169 1170 itd ).
  1.  
  2. SELECT
  3. produkty.id,
  4. produkty.nazwa,
  5. kat_glowna,
  6. ceneo,
  7. skapiec,
  8. nokaut
  9. FROM produkty
  10. LEFT JOIN kategorie ON produkty.prod_kat = kategorie.id
  11. LEFT JOIN comparisions ON comparisions.prod_id = produkty.id
  12. WHERE kategorie.kat_glowna = 1168
  13.  


Zapytanie działa bez problemu.


Teraz chciałbym wykonać update tabeli comparisions kolumny ceneo , założenie jak powyżej czyli katglowna= 1168

  1. UPDATE comparisions
  2. LEFT JOIN kategorie ON produkty.prod_kat = kategorie.id
  3. LEFT JOIN comparisions ON comparisions.prod_id = produkty.id
  4. SET comparisions.ceneo = 5
  5. WHERE kategorie.kat_glowna = 1168


Zwraca błąd #1066 - Not unique table/alias: 'comparisions'


Zaczalem prace nad aliasami

  1. UPDATE comparisions
  2. LEFT JOIN kategorie ON produkty.prod_kat = kategorie.id
  3. LEFT JOIN comparisions AS c ON c.prod_id = produkty.id
  4. SET c.ceneo = 5
  5. WHERE kategorie.kat_glowna = 1168


Zwraca błąd #1054 - Unknown column 'produkty.prod_kat' in 'on clause'

Niestety na tym etapie stanąłem. Pomocy smile.gif


************* UPDATE ***************

  1. UPDATE comparisions , produkty , kategorie
  2. SET comparisions.ceneo = 99 WHERE produkty.prod_kat = kategorie.id AND comparisions.prod_id = produkty.id AND kategorie.kat_glowna = 1168


Zapytanie powyzej przynosi oczekiwany rezultat, pytanie czy mozna to jakos zgrabniej lub poprawniej sformułować , czy warunek kategorie.kat_glowna = 1168 , mozna zdefiniowac w postaci jakiejs tabeli z kategoriami ( bedzie kilkadziesiat cyfr ), lub zewnetrzengo pliku?
viking
  1. AND kategorie.kat_glowna IN (1,2,3)

Ewentualnie różne odmiany EXISTS itd.
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.