複雑なMySQLクエリを何度も検索しています。
それは達成システムです。
テーブルの構造は単純で、形式は対称的です。
最初のテーブル(achievements_base)には、アチーブメント参照が含まれています:各アチーブメントには次のものがあります:-ID(行のID、自動インクリメント&一意)、-code_id(アチーブメントの参照)、-rank_id(アチーブメントのサブカテゴリcode_id)、-およびアチーブメント名(表示目的)。
2番目のテーブル(achievements_user)には、ユーザーによって取得されたアチーブメントが含まれます。ロック解除された各アチーブメントには、次のものがあります。 -実績のcode_idのカテゴリ)、-およびユーザーID。
テーブルの構文は次のとおりです。
achievements_base
id - code_id - rank_id - name
1 - 1 - 1 - foo
2 - 1 - 2 - bar
3 - 1 - 3 - foobar
4 - 1 - 4 - foofoo
5 - 2 - 1 - barbar
achievements_user
id - code_id - rank_id - user_id
1 - 1 - 1 - 1
2 - 1 - 2 - 1
3 - 2 - 1 - 1
ユーザーが持っていない実績を表示したい(GROUP BY code_id)
In the table exemple above, for example, expected result is, for the user_id 1 :
3 - 1 - 3 - foobar
しかし、私はそれを行う方法がわかりません!私はすでに複数のクエリを試しました。
英語でごめんなさい、私はフランス語です!
ありがとう !
編集、私が試したクエリの1つの例:
SELECT AB.name
FROM achievements_base AB
RIGHT JOIN achievements_users AU
ON AU.code_id = AB.code_id AND AU.rank_id = AB.rank_id
WHERE (SELECT COUNT(*) FROM achievements_users AU WHERE AU.user_id = 1) = 0
GROUP BY AB.code_id
ORDER BY AB.code_id ASC