2017-03-26 1 views
1

Ich mache ein Netz mit Punkt und Belohnungssystem, in dem Benutzer Punkte sammeln und, wenn Benutzer die Anforderung erfüllen, zeigen, Benutzer wird eine Belohnung und Level bekommen.die Benutzer Überprüfung ist für die Erfüllung der Anforderung an MySQL

Als Beispiel ist hier meine Benutzertabelle

id | username | level | point 
1 | nameuser | 0  | 0 

Award:

idaward | awardname | pointreq | badgeid 
1  | LEVEL ONE | 10  | 1 

und so weiter, ich habe mehr als 100 Auszeichnung für die Benutzer.

Auszeichnung log

idlog | userid | awardid | badgeid | givendate 

Und mein Ziel ist es, wie wenn der Benutzer berechtigt zu prüfen ist oder die Anforderung erfüllen, eine Auszeichnung & Abzeichen zu bekommen?

Der Fluss:

Users have a point -> check if user meets the requirement to level up & get award 
-> Users will leveled up and get a reward (insert the info. to award log) 
    If users already have it then ignore it. 

ich Laravel bin mit, wenn Sie also die Laravel Abfrage machen kann, werde ich es wirklich schätzen, aber ich werde auch roh MySQL-Abfrage akzeptieren.

Danke

Antwort

0

Sie können die folgenden Update-Abfrage ausführen:

UPDATE user 
SET level = level + 1 
WHERE 
id = ? 
AND EXISTS (
    SELECT * FROM award WHERE pointreq <= user.point 
    AND awardid NOT IN (
     SELECT awardid from awardlog WHERE userid = user.id 
    ) 
); 

Wenn das Update gibt 1 zurück, dann müssen Sie einen Eintrag in awardlog Tabelle einfügen, können Sie für folgende SELECT und INSERT Abfragen verwenden es:

Sie können awardid und badeidid von obiger Abfrage erhalten und in awardlog einfügen.

Außerdem müssen Sie sicherstellen, dass alle 3 Abfragen (UPDATE, SELECT und INSERT) aus Konsistenzgründen in einer einzigen Transaktion ausgeführt werden.

Verwandte Themen