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.

Hoe is dit op te lossen?
Dat ligt niet aan de cron, maar aan het script. Laat de relevante code eens zien?
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



Ger van Steenderen op 14/12/2020 14:27:26

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?

Mijn dank is groot!
Ik snap je vraag niet echt over het 'terugkomen'?
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
Je kan aan de hand van de gegevens een mooie tekst genereren en die via INSERT opslaan in messages_notifications.

Reageren