Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Update tabeli na podstawie wartości z innej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
lustfingers
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ć?
nospor
Zajrzyj do manuala mysql do dzialu UPDATE SYNTAX
Tam masz napisane jak to zrobic, czyli jak uzyc dwoch tabel w UPDATE
lustfingers
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 ?
mmmmmmm
Komentarze do twojego linka... Babu Ramesh, jeden z pierwszych
lustfingers
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
mmmmmmm
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.
lustfingers
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.

mmmmmmm
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
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.