![]() |
![]() |
![]()
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ć? |
|
|
![]() |
![]()
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 |
|
|
![]()
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 ?
|
|
|
![]()
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
|
|
|
![]()
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 ![]() |
|
|
![]()
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. |
|
|
![]()
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. |
|
|
![]()
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 :
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 20:45 |