Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Update tabeli na podstawie wartości z innej tabeli
lustfingers
post 18.03.2015, 18:11:47
Post #1





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 18.03.2015

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


Witam wszystkich,

Posiadam dwie tabele customer i customer_group.

Tabela customer posiada takie kolumny jak id_customer, customer_group_def, newsletter. W customer_group domyślnie jest 1 a w newsletter 0.
Przykład tabeli customer

| 1 | 1 | 0 |
| 2 | 2 | 1 |
| 3 | 1 | 0 |

Natomiast tabela customer_group posiada dwie kolumny id_customer i customer_group, tutaj wygląda to następująco id klienta i id grupy, jeśli klient należy do dwóch grup to są dwa wpisy o jednym id_customer z różnymi wartościami grup.
Przykład tabeli customer_group

| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |

Teraz przechodząc do sedna chcę do crona dodać takie zapytanie aby sprawdzał czy klient zaznaczył newsletter (wartość 1 w kolumnie) jeśli tak to zmieniałby wartość w customer_group_def na 2. To mogę zrobić takim zapytaniem:

UPDATE customer
SET customer_group_def = 2
WHERE newsletter = 1

Mój problem tkwi właśnie w drugiej tabeli czyli customer_group dla tych klientów z newsletterem musi zostać zaktualizowana o dwie wartości czyli klient z newsletterem musi należeć do obydwu grup 1 i 2 a klient bez newslettera do grupy 1.

Podpowie ktoś jak to zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post 18.03.2015, 18:20:48
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zajrzyj do manuala mysql do dzialu UPDATE SYNTAX
Tam masz napisane jak to zrobic, czyli jak uzyc dwoch tabel w UPDATE


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
lustfingers
post 18.03.2015, 20:16:22
Post #3





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 18.03.2015

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


A jest gdzieś manula po polsku? Ogólnie jestem początkujący w sql i php więc mimo że angielski w miarę ogarniam to już sam manual nie jest dla mnie do końca zrozumiały. Muszę mieć jakiś przykład z opisem który będzie dla mnie w miarę jasny aby załapać o co chodzi. W chwili obecnej staram się to zrozumieć jednak nie wiem jak mam to przełożyć na moje potrzeby http://dev.mysql.com/doc/refman/5.7/en/update.html ?
Go to the top of the page
+Quote Post
mmmmmmm
post 19.03.2015, 00:28:39
Post #4





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

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


Komentarze do twojego linka... Babu Ramesh, jeden z pierwszych
Go to the top of the page
+Quote Post
lustfingers
post 19.03.2015, 05:30:28
Post #5





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 18.03.2015

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


Komentarze również przeglądałem zanim napisałem post powyżej i podejrzewam że masz na myśli to:

UPDATE TABLE_1 LEFT JOIN TABLE_2 ON TABLE_1.COLUMN_1= TABLE_2.COLUMN_2
SET TABLE_1.COLUMN = EXPR WHERE TABLE_2.COLUMN2 IS NULL

Jeśli tak to w dalszym ciągu nie wiem jak mam tego użyć, tzn. jak zrobić aby id_customer było dodawane podwójnie dla wpisów które w tabeli pierwszej mają zaznaczony newsletter? Trochę enigmatyczne podpowiedzi dostaję, powoli zaczynam sie gubić i chyba nie idę do przodu sciana.gif
Go to the top of the page
+Quote Post
mmmmmmm
post 19.03.2015, 07:07:32
Post #6





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

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


Chyba wreszcie kumam twój problem...
Tobie nie chodzi o UPDATE tabeli customer_group, tylko na ew. wykonanie DELETE/INSERT (DELETE tych rekordów, których jest za dużo - tu takich sytuacji nie powinno być, a INSERT dodatkowych grup, dla tych co mają "2"). Jeśli tak jest na[rawdę, to tabela customer_group (dla tego zadania) nie ma sensu, bo wszystkie informacje (do jakich grup przynależy) zawarte są w tabeli customer.
Go to the top of the page
+Quote Post
lustfingers
post 19.03.2015, 15:29:22
Post #7





Grupa: Zarejestrowani
Postów: 99
Pomógł: 5
Dołączył: 18.03.2015

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


Wytłumaczę jeszcze raz aby była jasność w tabeli customer standardowo w customer_group_def jest 1 co jest odpowiednikiem w tabeli customer_group wpisowi dla klienta
| 1 | 1 | jeśli zmienię klientowi domyślną grupę na 2 w tabeli customer to w tabeli customer_group powinny być dwa wpisy odnośnie jednego klienta:

| 1 | 1 |
| 1 | 2 |

Czyli klient o id 1 należy do domyślnej grup 1 i grupy dodatkowej 2.

Chcę zrobić tak sprawdzam w tabeli customer wartość kolumny newsletter jeśli 1 to zmieniam dla tego klienta wartość kolumny customer_group_def na 2, oraz dla tabeli customer_group wypisuje wszystkich klientów z wartością 1 oraz dodatkowo dla klientów z newsletterem wypisuje również z wartością 2.

Go to the top of the page
+Quote Post
mmmmmmm
post 19.03.2015, 15:58:24
Post #8





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

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


Przecież to napisałem... A co w sytuacji, gdy zmienisz z powrotem `customer_group_def` na 1?
I nadal twierdzę, że to bez sensu. Skoro wartości się duplikują (jest redundancja), to można skorzystać z innych danych.
Ale jeśli się upierasz by DOPISAĆ dane (nie UPDATE, a INSERT), to :
  1. INSERT INTO customer_group(id_customer, customer_group) SELECT c.id_customer, 2 FROM customer c LEFT JOIN customer_group cg ON cg.id_customer=c.id_customer AND customer_group=2 WHERE cg.id_customer IS NULL
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:45