2017-03-26 7 views
1

私はポイントと報酬システムを使ってWebを作り、ユーザがポイントを収集し、ユーザがそのポイントを満たしていれば、報酬とレベルアップになります。ユーザを確認することは、MySQLの要件を満たすためのものです

例として、ここに私のユーザテーブルだ

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

賞:

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

というように、私は、ユーザーのための100+賞を持っています。

賞ログ

idlog | userid | awardid | badgeid | givendate 

そして、私の目的は、ユーザが適格であるかどうかを確認または賞&バッジを取得するための要件を満たすためにどのようにでしょうか?

流れ:

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. 

あなたはLaravelの問い合わせを行うことができますので、もし私が、Laravelを使用しています、私は実際にそれを理解するだろうが、私はまた、生のMySQLのクエリを受け入れます。

あなたは、次の更新クエリを実行することができ、あなたに

答えて

0

ありがとう:

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 
    ) 
); 

更新はあなたがawardlogテーブルにエントリを挿入する必要があり、その後1を返した場合、あなたは以下のSELECTINSERTクエリを使用することができますそれ:

SELECT * FROM award WHERE pointreq <= user.point 
AND awardid NOT IN (
    SELECT awardid from awardlog WHERE userid = user.id 
); 

上記のクエリからawardidとbadgeidを取得し、awardlogに挿入することができます。

また、3つのクエリ(UPDATESELECTINSERT)が一貫性のために1つのトランザクションで実行されるようにする必要があります。

関連する問題