MySQL查询只返回3个匹配的行

时间:2016-10-22 10:46:08

标签: php mysql

我有一个存储配置选项的MySQL表。

config_options表如下

------------------------------------------------
id    config_id     q_id    ans_id
------------------------------------------------
1       5            602      152
2       5            603      156
3       6            610      169
4       6            603      156
5       6            602      152
6       28           603      157
7       28           601      107

例如,如果用户选择问题并且选项602-> 152,603-> 156,610-> 169 我期待结果应该只显示3行(3,4,5)。

我得到了这个结果:

------------------------------
id  config_id   q_id    ans_id
------------------------------
1   5           603     156
2   5           602     152
3   6           610     169
4   6           603     156
5   6           602     152

我使用以下查询:

SELECT *
FROM config_options a
WHERE (a.q_id=602 and a.ans_id=152) OR
      (a.q_id=610 and a.ans_id=169) OR
      (a.q_id=603 and a.ans_id=156)
ORDER BY config_id

这是SQLFIDDLE的路径 http://sqlfiddle.com/#!9/c73a1

CREATE TABLE config_options (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
config_id int,
  q_id int,
  ans_id int
);
INSERT INTO config_options
  (config_id,q_id,ans_id)
VALUES
  (5,603,156),
  (5,602,152),
  (6,610,169),
  (6,603,156),
  (6,602,152),
  (28,603,157),
  (28,601,107);

2 个答案:

答案 0 :(得分:1)

这是你的结果集:

------------------------------
id  config_id   q_id    ans_id
------------------------------
1   5           603     156
2   5           602     152
3   6           610     169
4   6           603     156
5   6           602     152

此结果集中的任何三行都将满足您当前的条件。所以ORDER BY id RAND() LIMIT 3是一个有效的答案 - 除非我(和其他人)怀疑,你没有正确地阐述问题。

答案 1 :(得分:0)

根据您的关注,它将对您有用

SELECT max(id)as id,config_id,q_id,ans_id
FROM config_options a
WHERE (a.q_id=602 and a.ans_id=152) OR
      (a.q_id=610 and a.ans_id=169) OR
      (a.q_id=603 and a.ans_id=156)
group by ans_id
ORDER BY id asc

Sql Fiddle