2017-03-28 2 views
0

タイトルは最高ではないかもしれませんが、私はちょっとした言葉でそれを説明する方法を知りませんでした。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  

。私はそれが正しい方法であるかどうかわからない。

本当にありがとうございます。

ありがとうございます。

答えて

1

この方法を試してみてください:

セットアップ:

create table users(
    id integer, 
    name varchar(15) 
); 

create table article_users (
    user_id integer, 
    article_id integer, 
expired_date date 
); 

insert into users values (1, 'Alice'), (2, 'Bob'), (3, 'Charlie'); 
insert into article_users values (1, 1, '2016-01-01'), 
       (1, 2, '2018-01-01'), (3, 1, '2016-01-01'); 

問合せ:

select u.name, 
     case when a.qtd>0 then 'Yes' 
      when a.qtd=0 then 'Expired' 
      else 'No' end as relation 
    from users u 
     left join 
     (select user_id, 
       sum(if(timediff(expired_date, curdate())>0, 1, 0)) qtd 
      from article_users 
      group by user_id) a on u.id = a.user_id 
order by u.name; 

結果:SQLFiddle以来

name  relation 
------------------ 
Alice Yes 
Bob  No 
Charlie Expired 

は現在、私はそれを追加動作していませんSQLize。ここで働いてください:http://www.sqlize.com/8cBsHBWCbN

+0

ええ、それは私が探していたクエリです。単に完璧です。ありがとうございました! – cooper

関連する問題