2012-09-21 5 views
6

に一致する複数の行選択:これは私の例に表示する方が良いだろう二つの条件

私は一つの大きなフォームからユーザーの回答を格納しているテーブルを、持っています。各フォームには139の質問があります。これらの質問は別のテーブルに保存され、必要に応じてquestionIDで結合されます。ユーザーごとにIDがあります。私は今、1つまたは特定の質問により多くの回答に一致するユーザーを表示するために、フィルタを作成する必要があります。

は例えば、私は、質問14は「はい」と答えているユーザーを、したい54が空でない質問と。これは、テーブルがどのように見えるかである10よりも大きい100の質問:

**userID** | **questionID** | **answer** 

1   14    "yes" 
1   54    "something" 
1   100    "9" 
2   14    "no" 
2   54    "north 
2   100    "50" 
3   14    "yes" 
3   54    "test" 
3   100    "12" 

結果としてI userID 3だけが返されます。すべての条件を満たすためです。

これはColdFusionで簡単に検索できますが、PHPでは何も見つかりませんでした。この例のように3つだけでなく、ランダムな数の質問を追加する機会を持つことが重要です。あなたが試すことができ

+0

あなたのテーブルのスキーマは何ですか? (SHOW CREATE TABLE your_table'の結果) – Jocelyn

+0

CREATE TABLE 'leal_dotaznik'( ' ID' int(11)NOT NULL auto_increment、 'UID' int(11)NOT NULL、 ' questionID' int(11)NOT NULL、 '答え'テキストNOT NULL、 PRIMARY KEY( 'ID') )ENGINE = MyISAM AUTO_INCREMENT = 3059 DEFAULT CHARSET = utf8 –

答えて

7

てみてください、

SELECT userID 
FROM tableName 
WHERE (questionID = 14 AND 
     answer = 'yes') OR 
     (questionID = 54 AND 
     answer <> 'empty') OR 
     (questionid = 100 AND 
     answer > 10) 
GROUP BY userID 
HAVING COUNT(*) = 3 

SQLFiddle Demo

+0

あなたはOPのテーブル構造をどのように推測しましたか? – Jocelyn

+0

@Jocelyn上記の質問を参照してください、テーブルがあります:) –

+0

「これらの質問は**別のテーブルに保存されています**、questionIDで必要なときに参加しました」という文章があります。 – Jocelyn

1

SELECT questionID, answer 
FROM table 
WHERE (questionID = 14 AND answer = 'yes') 
OR (questionID = 54 AND answer != '') 
OR (questionID = 100 AND answer > 10); 
+0

あなたはuserID = 3で結果ユーザをハードコーディングしました。それは例であったのです –

+0

ありがとうございます、とにかく私は@Matei Mihaiが正しい答えを持っていると思います。彼は一度にすべての条件を望んでいます。 –

+0

これは*すべての条件を満たしておらず、そのうちの1つのみです。 – davek

4
SELECT q.userID 
    FROM questions q 
    JOIN questions qq ON qq.userID=q.userID 
     AND qq.questionID='54' AND qq.answer IS NOT NULL 
    JOIN questions qqq ON qqq.userID=q.userID 
     AND qqq.questionID='100' AND qqq.answer > 10 
WHERE q.questionID=14 
    AND q.answer = 'yes' 
関連する問題