2012-11-29 80 views
-1

我想要一份找出如何建立一个单一的MySQL查询检索*用于在数据库中的所有TESTIDs。因此,不用为每个唯一的TESTID运行一个for循环来生成多个数据库调用,如下所示,我可以简单地运行一个查询。优化的单MySQL查询需要

select * from test_results where TESTERID='3' and TESTID='5' 
select * from test_results where TESTERID='3' and TESTID='9' 
select * from test_results where TESTERID='3' and TESTID='10' 
select * from test_results where TESTERID='3' and TESTID='12' 
select * from test_results where TESTERID='3' and TESTID='15' 
select * from test_results where TESTERID='3' and TESTID='4' 

感谢您的任何意见。

+1

您所有TESTID表示, db?所以,只是不包括最后的“和”子句:SELECT * FROM其中TESTERID =“3” – Don

回答

3

我会假设你正在寻找呢?

SELECT * 
FROM test_results 
WHERE 
    TESTERID = '3' 
    AND TESTID IN ('5', '9', '10', '12', '15', '4') 

如果您使用的是数值型字段的你应该用这个代替BTW:

SELECT * 
FROM test_results 
WHERE 
    TESTERID = 3 
    AND TESTID IN (5, 9, 10, 12, 15, 4) 
4

你可以删除单引号,如果列的数据类型是数字()否则包装它,如果没有。

SELECT * 
FROM test_results 
WHERE testerID = 3 AND 
     testID IN (5,9,10,12,15,4) 
+0

感谢,但你如何添加新testids test_results,因为他们得到产生的? – user1774442

+0

你是什么意思*新testids,因为他们得到* *?你想检索'testerID = 3'的所有记录吗?在你可以直接做到这一点,'SELECT * FROM test_results WHERE testerID = 3' –

-1

谢谢你,我想出了如下工作方案:

SELECT * FROM test_results WHERE testerID = 3 AND testID IN (select TESTID from test_results) 
+1

由于很多人已经指出,为什么你需要检查TestID呢?你的where子句的第二部分'AND testID IN(从test_results选择TESTID)'本质上是说'AND 1 = 1'。它总是会 – Greg

+0

你是绝对正确的格雷格是真实的。有时间休息一下,重新思考问题。谢谢。 – user1774442

0

如果你想从testerid = '3' 获得的所有记录

select * from test_results where TESTERID='3'