以下のような場合のSQL文を教えてください。


1.アンケートサイトで入力する要素として、emailアドレスの他にチェックボックス(on/off)による複数選択項目が多数ある
2.任意の複数の項目にチェックが入っているユーザーを選ぶことができる

現在考えているのは、ユーザーtableと項目テーブルを作る方法で、書き込むことや取り出すことはできたのですが、
複数項目にチェックしているユーザーを選ぶためのSQL文がわかりません。

不勉強ゆえ考え違いもあるかと思いますがよろしくお願いします。
効率的なら全然違うDB設計も知りたいです。


現在のDB
------------------------
CREATE TABLE users
(
id INTEGER
email VARCHAR(255)
) ;

CREATE TABLE items
(
id INTEGER NOT NULL,
user_id INTEGER,
type string , //typeはチェック項目の名前もしくは対応する番号です。
on_off TINYINT(1)
) ;

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/08/14 14:40:51
  • 終了:2006/08/21 14:45:03

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402006/08/14 14:50:50

ポイント35pt

http://dev.mysql.com/doc/refman/4.1/ja/select.html

TINYINT(1) ってことは MySQL ですかね。

items テーブルは複数選択項目 x ユーザーの数だけあるという設計に見えます。

設計上はそれほど問題では無いように思いました。

以上を仮定した場合、2項目以上選択した人を取り出すには

SELECT user_id

FROM items

WHERE on_off = 1

GROUP BY user_id

HAVING count(*) > 1

ORDER BY user_id

なところでしょうか。

MySQL 4.1 以上ではサブクエリが使えるのでこれと

users テーブルを JOIN すれば email も取り出せます。

他のDBでも大きくは変わらないと思います。

id:ikasamt

早速の回答ありがとうございます。勉強になりました。

私の質問文の書き方が完全に悪かったのですが「複数項目の選択」というのは「コンピューター + 美容 + 旅行」などのように「具体的な複数項目」されている状態を検索したいという意味です。説明不足で申し訳ありません。

という訳で質問を続けます。

2006/08/14 14:55:14
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/08/14 15:00:26

ポイント35pt

http://q.hatena.ne.jp/1155534051

ちょっとまだ条件がよく分かってないのですが、

SELECT user_id

FROM items

WHERE on_off = 1

AND type IN ( 'コンピューター','美容','旅行' )

GROUP BY user_id

HAVING count(*) = 3

ORDER BY user_id

って事でしょうか?

id:ikasamt

すばやい返答ありがとうございます。まさに求めていたsql文です!試験できる環境でないので動作報告できませんが、上手くいき次第コメントにて報告させていただきます。

ご教示いただきありがとうございました。

2006/08/14 15:19:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません