Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]SELECT i UPDATE 3 tabel
infer
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 4.02.2010

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


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

Ten post edytował infer 2.10.2012, 22:33:17
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


http://dev.mysql.com/doc/refman/5.0/en/update.html widzisz gdzieś tutaj joina w skladni (IMG:style_emoticons/default/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ń
Go to the top of the page
+Quote Post
viking
post
Post #3





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Cytat(skowron-line @ 3.10.2012, 03:07:36 ) *


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?

Ten post edytował viking 3.10.2012, 05:51:55
Go to the top of the page
+Quote Post
infer
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 4.02.2010

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


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:/
Go to the top of the page
+Quote Post
viking
post
Post #5





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Spróbuj zrobić alias na tej tabeli przy JOIN. LEFT JOIN comparisions c...
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Wg mnie nie powinno być dwa razy comparision, tylko raz produkty
Go to the top of the page
+Quote Post
infer
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 4.02.2010

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


Panowie i Panie (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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?

Ten post edytował infer 6.10.2012, 02:03:02
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


  1. AND kategorie.kat_glowna IN (1,2,3)

Ewentualnie różne odmiany EXISTS itd.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.09.2025 - 15:22