私は4つのテーブル:user
,game
,user_games_joined
およびuser_rating
を持っています。彼らは与えた前回(すなわちuser_games_joined
表は、同じゲームのために、ユーザーごとに行が含まれています)SQL - 別のテーブルの条件でSELECTを実行します
ユーザーが別のユーザーのための「評価」を与えるかもしれないが、彼らはそのユーザにゲームをプレイしている場合にのみそのユーザーの評価はです。
ユーザーが現在別の特定のユーザーに評価を与えることが許可されているかどうかを示す単一のSELECTステートメントを作成しようとしています。ここで私がこれまで持っているものです。この文は0
を返し
SELECT COUNT(*)
FROM user_games_joined from_joined
LEFT JOIN game ON from_joined.game_uuid = game.uuid
INNER JOIN user_games_joined to_joined ON from_joined.game_uuid = to_joined.game_uuid
WHERE from_joined.user_uuid = [USER_GIVING_RATING_UUID]
AND to_joined.user_uuid = [USER_RECEIVING_RATING_UUID]
AND game.date > [DATE_OF_MOST_RECENT_RATING];
場合は、最終的な答えは、偽です。 else true(最後の評価が与えられてから2人のユーザーの間で少なくとも1つのゲームがプレイされています)。問題は[DATE_OF_MOST_RECENT_RATING]は不明です:user_rating
テーブルから決定する必要があります。私は2つの別々のクエリでこのタスクを達成することができ
SELECT date from user_rating
WHERE to_user_uuid = [USER_RECEIVING_RATING_UUID]
AND from_user_uuid = [USER_GIVING_RATING_UUID]
ORDER BY date DESC LIMIT 1;
もちろんので、しかし、明白な理由のために私は、単一の文の中にそれを組み合わせるしたいと思います。ここでは、情報のその部分を問い合わせるかもしれない方法です。誰かがこれで私を助けることができますか?ありがとう!
EDIT:ボーナスポイントのために、誰かが同様user_rating
テーブルにINSERT中にこのチェックを実行する方法を考え出すことができるので、検証はINSERTの前に別のクエリとして発生する必要はないのですか?あなたのDBた私は知らないので、
select (max(ur.rating_date) < max(g.date))
構文でMySQLが示唆されているため、Oracleタグを削除しました。 –