Door
Ray Mond
op 14-12-2020 11:27
gewijzigd op 14-12-2020 11:29
2.869 views
Goedemorgen,
Ik zoek iets waardoor doormiddel van een cron berichten en user uit de database gehaald kunnen worden, stel een klant heeft een uur niets teruggestuurd, dan moet zijn bericht terugkomen met de tijd van nu als voorbeeld zodat wij klant weer een bericht kunnen sturen.
Deze cron moet elk minuut draaien maar het probleem hoe we het nu hebben is dat alle berichten van alle klanten ouder dan een uur terugkomen, we moeten juist het laatste bericht van alle klanten hebben die ouder zijn dan een uur en niet alles.
De berichten moeten weer in een ander tabel gezet worden.
In onderstaand voorbeeld is bericht_id de PK in de tabel berichten.
SELECT klant_id, MAX(bericht_id) bericht_id FROM berichten
GROUP BY klant_id
HAVING MAX(datum_tijd) < NOW() - INTERVAL 1 HOUR
Door de 'GROUP BY klant_id' en 'MAX(bericht_id)' krijg je het laatste bericht_id per klant, de 'HAVING MAX(datum_tijd)' filtert de klanten met berichten ouder dan een uur.
Als je dit in een subquery plaatst kan je daarna het betreffende bericht ophalen:
SELECT b.* FROM
(SELECT klant_id, MAX(bericht_id) bericht_id FROM berichten
GROUP BY klant_id
HAVING MAX(datum_tijd) < NOW() - INTERVAL 1 HOUR) kb
JOIN berichten b ON b.bericht_id = kb.bericht_id
In onderstaand voorbeeld is bericht_id de PK in de tabel berichten.
SELECT klant_id, MAX(bericht_id) bericht_id FROM berichten
GROUP BY klant_id
HAVING MAX(datum_tijd) < NOW() - INTERVAL 1 HOUR
Door de 'GROUP BY klant_id' en 'MAX(bericht_id)' krijg je het laatste bericht_id per klant, de 'HAVING MAX(datum_tijd)' filtert de klanten met berichten ouder dan een uur.
Als je dit in een subquery plaatst kan je daarna het betreffende bericht ophalen:
SELECT b.* FROM
(SELECT klant_id, MAX(bericht_id) bericht_id FROM berichten
GROUP BY klant_id
HAVING MAX(datum_tijd) < NOW() - INTERVAL 1 HOUR) kb
JOIN berichten b ON b.bericht_id = kb.bericht_id
Heeft een tijdje geduurd, mijn excuses maar ik ben er weer haha :)
Ik snap een deel wel en een deel ook weer niet om heel eerlijk te zijn.
Het idee is dan ook inderdaad om het na een uur terug te laten komen en wanneer klant dan nog niet terug is dan het later nog eens terug te laten komen op een ander ingesteld tijdstip.
Mijn database werkt met messages en met users tabellen die moeten dan eigenlijk terugkomen naar messages_notification, hoe kan ik dit even makkelijk doen?
Laatste bericht van klant moet terugkomen naar messages_notification, maar dan echt enkel het laatste bericht (vanuit messages) wanneer de klant langer dan een uur geen reactie heeft gegeven.
Dan sturen wij een reactie richting de klant wat hem weer actief moet krijgen, lukt dit niet dan willen we het na een aantal uur nog eens terug laten komen zodat we weer kunnen lokken als het ware