と の 2 つのテーブルがuser
ありprojects
、2 つのテーブルは 1 対多の関係にあります。
projects
テーブルにはstatus
、ユーザーのプロジェクト ステータスのフィールドがあります。
status
次のいずれかになります。
launched, confirm, staffed, overdue, complete, failed, ended
ユーザーを次の 2 つのカテゴリに分類したいと考えています。
launched
フェーズ中のプロジェクトを持つユーザーlaunched
ステータス以外のプロジェクトを持つユーザー。
次のクエリを使用しています。
SELECT DISTINCT(u.*), CASE
WHEN p.status = 'LAUNCHED' THEN 1
ELSE 2
END as user_category
FROM users u
LEFT JOIN projects p ON p.user_id = u.id
WHERE (LOWER(u.username) like '%%%'
OR LOWER(u.personal_intro) like '%%%'
OR LOWER(u.location) like '%%%'
OR u.account_status != 'DELETED'
AND system_role=10 AND u.account_status ='ACTIVE')
ORDER BY set_order, u.page_hits DESC
LIMIT 10
OFFSET 0
次のシナリオで重複したレコードに直面しています:
launched
ユーザーがステータスがoverdue
、complete
またはのプロジェクトを持っている場合failed
、そのユーザーは の両方の条件をCASE
満たしているため、2 回記録されます。
launched
ステータスのプロジェクトを持つユーザーが自分のuser_category
セットを に取得するクエリを提案してください1
。に対して同じユーザーを繰り返さないでくださいuser_category 2
。