2012-09-21 38 views
6

Điều này sẽ tốt hơn để hiển thị trên ví dụ của tôi:CHỌN nhiều hàng WHERE khớp với hai điều kiện

Tôi có bảng, nơi người dùng được lưu trữ câu trả lời từ một biểu mẫu lớn. Mỗi mẫu có 139 câu hỏi. Những câu hỏi này được lưu trữ trong bảng khác nhau, tham gia khi cần thiết với questionID. Đối với mỗi người dùng, có một ID. Bây giờ, tôi cần tạo bộ lọc để chỉ hiển thị những người dùng phù hợp với một hoặc hơn câu trả lời về các câu hỏi cụ thể.

Ví dụ, tôi muốn người dùng, nơi câu hỏi 14 có trả lời "có", câu hỏi 54 là không có sản phẩm nào và thắc mắc 100 là lớn hơn 10. Đây là cách bảng trông:

**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" 

kết quả i chỉ muốn trả lại userID 3 vì nó đáp ứng tất cả các điều kiện.

Điều này sẽ dễ dàng tiếp cận với ColdFusion, vì nó cho phép truy vấn trong kết quả truy vấn, nhưng trong PHP tôi đã không tìm thấy bất kỳ cách nào. Điều quan trọng là có cơ hội để thêm số lượng câu hỏi ngẫu nhiên, không chỉ ba câu hỏi như trong ví dụ này.

+0

schema bảng của bạn là gì? (kết quả của 'SHOW CREATE TABLE your_table') – Jocelyn

+0

TẠO TABLE' leal_dotaznik' ( 'ID' int (11) NOT NULL auto_increment, ' UID' int (11) NOT NULL, 'questionID' int (11) NOT NULL, 'answer' văn bản NOT NULL, PRIMARY KEY (' ID') ) ENGINE = MyISAM AUTO_INCREMENT = 3059 DEFAULT CHARSET = utf8 –

Trả lời

7

Cố gắng,

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

Bạn đoán cấu trúc bảng OP như thế nào? – Jocelyn

+0

@Jocelyn xem câu hỏi ở trên, có một bảng :) –

+0

Tôi thấy một văn bản nêu rõ "Những câu hỏi này được lưu trữ trong ** bảng khác nhau **, được nối khi cần với questionID". – Jocelyn

1

Bạn có thể thử:

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

bạn đã mã hóa cứng người dùng kết quả bởi userID = 3. Bằng cách đó là một ví dụ –

+0

Cảm ơn bạn, nhưng dù sao tôi nghĩ @Matei Mihai có câu trả lời đúng. Anh ta muốn tất cả các điều kiện cùng một lúc, không ít nhất một điều kiện. –

+0

Điều này sẽ không đáp ứng * tất cả * điều kiện, chỉ một trong số chúng. – 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' 
Các vấn đề liên quan