Aktualizacja wielu rekordów naraz automatyzacja w bazie

0

Dzień dobry, chce aktualizować wiele rekordów jednocześnie oto zapytanie które działa poprawnie do 1 rekordu

UPDATE `ps_spmgsnipreview` SET `admin_response` = 'Potwierdzony zakup!', `is_display_old` = '1'
    WHERE `ps_spmgsnipreview`.`id` = 9;

Teraz bym chciał zmienić wiele rekordów np 10,87,56... Nie po kolei tak jak 1,2,3... Jak mogę tego dokonać próbowałem czegoś takiego ale nie działa, jak powinno to wyglądać?:)

UPDATE `ps_spmgsnipreview` SET `admin_response` = 'Potwierdzony zakup!', `is_display_old` = '1'
    WHERE `ps_spmgsnipreview`.`id` = (1, 9, 100);
0
UPDATE `ps_spmgsnipreview`
SET `admin_response` = 'Potwierdzony zakup!', `is_display_old` = '1'
WHERE `ps_spmgsnipreview`.`id` IN ('12','5','3','17')
ORDER BY FIELD(`ps_spmgsnipreview`.`id`,'12','5','3','17')
0

Super dzięki:)

0
ehhhhh napisał(a):

ORDER BY FIELD(ps_spmgsnipreview.id,'12','5','3','17')

Po co ORDER BY przy UPDATE? To zupełnie niepotrzebne...

0

Mam jeszcze jedną rzecz do zrobienia nie wiem czy to w sql da rade czy jedynie już np w php uzyskam efekt?

Mam sklep na prestashop 1.7 z odpowiednio lekko zmodyfikowaną przeze mnie wtyczką. Celem jest zautomatyzować proces komentarzy aby automatycznie przy odpowiednim komentarzu danego produktu pojawił się napis potwierdzony zakup tylko przy komentarzach które faktycznie wystawił klient i kupił dany produkt. Wszystko już mi działa ale sam musze sprawdzać tabele i parować po email klienta który napisał komentarz oraz email bazy czy ktoś na taki email dokonał zakup oraz po id produktu czy fatycznie ten dany towar a nie inny zapisuje id komentarza i wrzucam kilka na raz tak jak pytałem powyżej. Reszta komentarzy nie ma prawa mieć podpisu potwierdzony zakup.

Na chwile obecną chciał bym zrobić coś takiego, klient pisze opinie pod produktem w sklepie opinia wpada do bazy tabeli tabela1 istotna jest kolumna email oraz id_product w tej tabeli.
Następnie mam tabele2 gdzie są miedz innymi adresy email wszystkich zakupów w tabeli3 co klient kupił dane z wszystkich zakupów sklepu.
Zastanawiam się jak to zautomatyzować czy się w ogóle da to jet uproszczony tylko poglądowy opis w prescie nie wygląda to tak kolorowo niestety i więcej danych z różnych tabel musisz wyciągnąć do nowej tabeli...

Ale załóżmy jak uzyskać póki co w mojej nowej tabeli (tabela4) id_product z tabeli 1 następnie email z tabeli2 i email z tabel3 jak już uzyskam dane rekordy w nowej tabeli 4 to jest funkcja która zwróci np true gdy w danym rekordzie adresy email się zgadzają(są takie same) w obu kolumnach email? Potem bym mógł dodać parowanie po id_productu np. dla pewność ze ten klient email kupił ten produkt i dał komentarz pod tym produktem?

1

Ja nie znam za bardzo polskiego i nie zrozumiałem wszystkiego, co napisałeś, ale...
Wydaje mi się, że wystarczy stworzyć trigger odpalany po insercie do tabeli z komentarzami.
W triggerze sprawdzasz, czy osoba wystawiająca komentarz do produktu kupiła ten produkt i zapisujesz sobie to w dodatkowej kolumnie przy komentarzu (czy tam w dodatkowej tabeli, jeśli potrzebujesz odseparować te dane).
Mógłbyś też zrobić to bez triggera i przy wyświetlaniu komentarzy każdorazowo weryfikować, czy komentujący dokonał zakupu, ale nie sądzę, by było to optymalne (wszak wyświetlać komentarze będziesz zdecydowanie częściej, niż je dodawać)

0

Dzięki właśnie o to mi chodziło dawno nie bawiłem się aż tak bazami danych i zapomniałem o wyzwalaczu:)

1

To co napisał @Fac jest dobre, a ja tylko dodam, że lepiej zapisać datę zakupu ostatniego takiego produktu. Wtedy "NOT NULL" znaczy że kupił, a dodatkowo będziesz miał info ile dni po zakupie wystawił komentarz.

0

Nie potrafię sobie poradzić z tym wyzwalaczem:)

Stworzyłem sobie widok który zbiera mi wszystkie wartości do jednej tabeli które powinny zostać zmienione w tabeli z recenzjami. Widok nazwałem roboczo abc i tam popraswnie wpadają mi wartości już testowałem jest oki.
Teraz bym potrzebował wyzwalacz gdzie wartości kolumny id tabeli(widoku)abc jest równy kolumnie id tabeli ps_spmg.. Gdy id są sobie równe zmień wartość tego/tych id które są równe w kolumnach text_recenzje na wartość 'Potwierdzony zakup' w tabeli ps_spmg.. oraz zmień wartości
w kolumnach (tez gdzie id są sobie równe) is_display_old z 0 na wartość 1.

Oczywiście wyzwalacz nie musi być oparty na widoku no ale wtedy musiał by porównać wartości z kilku tabel czy jest to prawda a tak w widoku abc są juz id które powinny być zmienione i wyzwalacz ma prostszą funkcje porównać id abc z ps_spmg..

0

A jakie jest pytanie?

0

Trigger gdzie wartości kolumny id tabeli(widoku)abc jest równy kolumnie id tabeli ps_spmg.. Gdy id są sobie równe zmień wartość tego/tych id które są równe w kolumnach text_recenzje na wartość 'Potwierdzony zakup' w tabeli ps_spmg.. oraz zmień wartości
w kolumnach (tez gdzie id są sobie równe) is_display_old z 0 na wartość 1.

0

@dsxsoft: opublikuj SQL na takiej stronie https://onecompiler.com/mysql/3ywszub4d
i wtedy będziemy mieli o czym rozmawiać nie zapomnij tez o paru insertach :D

0

To jest pozornie bardzo proste co chce wykonać tylko nie wiem jak napisać ten prosty wyzwalacz:) Trochę zakręciłem to proste pytanie:)

Ale najprościej jak się da po prostu mam dwie tabele(dla uproszczenia nazw tab1 oraz tab2) każda z tabeli ma między innymi kolumnę o nazwie ID. Teraz chce zrobić tak gdy w tabeli (tab2) kolumna o ID np 55 i cały rekord występuje w tej tabeli (tab2) to w tabeli (tab1) aktualizuj rekord o ID kolumny 55, aktualizuj kolumnę 'text_recenzje' na "Potwierdzony zakup" oraz aktualizuj kolumnę 'is_display_old' na 1 w tym rekordzie o ID kolumny 55 w tabeli (tab1)

1 użytkowników online, w tym zalogowanych: 0, gości: 1