人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下のような場合の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)
) ;

●質問者: ikasamt
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB ON SQL String アドレス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント

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でも大きくは変わらないと思います。

◎質問者からの返答

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

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

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


2 ● b-wind
●35ポイント

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

って事でしょうか?

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ