タイトルは最高ではないかもしれませんが、私はちょっとした言葉でそれを説明する方法を知りませんでした。mysqlは重複した行を除いたままにします
表 "ユーザー"
id|name
--+--------+
1 |Alice |
2 |Bob |
3 |Charlie |
表 "article_users" 私はすべてのユーザーを獲得し、彼らが持っているかどうかを知る必要があります
user_id|article_id|expired_date
-------+----------+------------+
1 | 1 |01-01-2016
1 | 5 |01-01-2018
3 | 1 |01-01-2016
:
私はこのような2つのテーブルをしました記事の関係、それらの関係がある場合に期限が切れているかどうかを取得する。
期限切れの記事を知る必要はありません。つまり、ユーザーが(少なくとも)1件の記事で期限切れになっていない場合、その答えは「ええ、彼/彼女は積極的な関係を持っています。
私が働いていたクエリは次のとおりです。
SELECT u.*, IF(TIMEDIFF(expired_date,CURDATE())<0,'YES',IF(TIMEDIFF(expired_date,CURDATE())>0,'EXPIRED','NO')) relation
FROM users u
LEFT JOIN article_users au ON au.user_id = u.id
私が持っている問題は、私は理由LEFTの列がJOINの「複製」そうだ、と私は、ユーザーが持っているかどうかを知りたいということですアクティブな関係。私は、ユーザーが1つ以上のアクティブな関係を持っているかどうかに関係なく、意味します。彼/彼女が少なくとも1つ(アクティブな関係)を有する場合、結果は「はい」でなければならない。彼は積極的な関係がない(しかし彼/彼女は関係を持っている)場合、結果は "期限切れ"でなければならず、最後に彼/彼女は関係がない場合、結果は "いいえ"でなければなりません。
ので、望ましい結果は次のようになります。私はGROUP_CONCAT機能でそれを取得しようとしているが、私はそれを得るためにunabledよ
id|name |relation
--+--------+--------
1|Alice | YES
2|Bob | NO
3|Charlie | EXPIRED
。私はそれが正しい方法であるかどうかわからない。
本当にありがとうございます。
ありがとうございます。
ええ、それは私が探していたクエリです。単に完璧です。ありがとうございました! – cooper