みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

MySQL 条件での絞込みがうまくいきません

下記の質問をさせていただき、解決いたしましたが、それに関連して新たなご質問です。
http://okwave.jp/qa/q8830319.html

上記質問内容は、
以下のようなデータから、「結果」のような形でデータを取り出したいというもので、「いただいたご回答」の形で一旦解決しました。

usr テーブル
+--------+------+
| usr_id | name |
+--------+------+
| 1 | 太郎 |
| 2 | 二郎 |
| 3 | 花子 |
+--------+------+

usr_trm テーブル
+--------+--------+
| usr_id | trm_id |
+--------+--------+
| 1 | 1 |
| 1 | 3 |
| 1 | 4 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 2 |
+--------+--------+

cat テーブル
+--------+------+
| cat_id | name |
+--------+------+
| 1 | 性別 |
| 2 | 部署 |
+--------+------+

trm テーブル
+--------+--------+------+
| trm_id | cat_id | name |
+--------+--------+------+
| 1 | 1 | 男性 |
| 2 | 1 | 女性 |
| 3 | 2 | 総務 |
| 4 | 2 | 経理 |
+--------+--------+------+

結果
+--------+------+------+------+
| usr_id | name | cat1 | cat2 |
+--------+------+------+------+
| 1 | 太郎 | 1 | 3,4 |
| 2 | 二郎 | 1,2 | 3 |
| 3 | 花子 | 2 |   |
+--------+------+----- +------+

いただいたご回答
select t1.usr_id,t3.name
,group_concat(if(cat_id=1,t1.trm_id,null)) as cat1
,group_concat(if(cat_id=2,t1.trm_id,null)) as cat2
from usr_trm as t1
inner join trm as t2 on t1.trm_id=t2.trm_id
inner join usr as t3 on t1.usr_id=t3.usr_id
group by usr_id


さらにそこから、例えば「総務に所属する人をランダムにn件」という形で絞り込もうと思い、

WHERE t2.trm_id=3



ORDER BY RAND() LIMIT 10

を追加したところ、条件通り抽出はされるのですが、結果の「cat1」「cat2」に他のカテゴリーの値が入らなくなりました。

WHERE t2.trm_id=3

を消すと「cat1」と「cat2」に値が入ってきます。
「cat1」と「cat2」に全ての値が入った状態で絞込をするために、どのようにすればよいかわかりません。

アドバイスをいただけると幸いです。

投稿日時 - 2014-11-20 14:42:29

QNo.8831385

困ってます

質問者が選んだベストアンサー

この場合はusr_trmでユーザーごとのtrmを確認しないといけないのでは?

select t1.usr_id,t3.name
,group_concat(if(t2.cat_id=1,t1.trm_id,null)) as cat1
,group_concat(if(t2.cat_id=2,t1.trm_id,null)) as cat2
from usr_trm as t1
inner join trm as t2 on t1.trm_id=t2.trm_id
inner join usr as t3 on t1.usr_id=t3.usr_id
inner join usr_trm as t4 on t4.usr_id=t1.usr_id and t4.trm_id=3
group by usr_id
order by rand()
limit 10;

>総務に所属する人をランダムにn件

便利な機能だとは思いますが、SQLは明確な結果を得るための手段なので
不確実なrand処理を選ぶのは、個人的にはお勧めいたしかねます

投稿日時 - 2014-11-20 16:08:23

お礼

ご回答ありがとうございます!
まだ途中なのですが、ご回答を参考にさせていただき何とかうまく実装できそうです。
rand処理の件も助言いただきありがとうございます。
勉強させていただきました!

投稿日時 - 2014-11-20 19:54:58

ANo.1

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問