2013-02-17 68 views
1

有没有更好的方法来检查表中是否至少有一个给定条件的行?检查MySQL中的查询是否至少有2行

请看看这个PHP代码:

$result = mysql_query("SELECT COUNT(*) FROM table WHERE ......."); 
$has_2_rows = (mysql_result($result, 0) >= 2); 

我不喜欢这样做的原因,是因为我认为MySQL将获得和计算所有匹配的行,这对于大的结果很慢。

我想知道是否有一种方式,MySQL将停止并返回“1”或true时,找到两行。 LIMIT 2最后会有帮助吗?

谢谢。

回答

3

这是一个很好的问题,是的,有一种方法可以使这个非常高效,即使对于大型表格。

使用此查询:

SELECT count(*) FROM (
    SELECT 1 
    FROM table 
    WHERE ....... 
    LIMIT 2 
) x 

所有的工作都是由内部查询,当它到达2列停靠完成。还请注意select 1,它可以提供更高的效率,因为它不必从列中检索任何值 - 只是常量1

外部的count(*)将会计算最多2行。

注意:由于这是一个SQL问题,我从答案中省略了PHP代码。

+0

谢谢!这回答了我的问题,并为只有SQL的方法+1。 – Nuno 2013-02-17 00:46:13

1

下面的查询将只检查您请求的两行。 mysql_num_rows可以检查有多少行没有任何循环返回。

$result = mysql_query("SELECT col1 FROM t1 WHERE ... LIMIT 2"); 
if (mysql_num_rows($result) == 2) { 

请避免使用ext/mysql,如果你可以切换到PDOmysqli

+0

我现在使用“mysqli”。我在问题中使用的并不重要,因为这不是问题所在。 – Nuno 2013-02-17 00:40:39

+0

@NunoPeralta你为什么只读这个问题的第二部分?我甚至用横向规则将我的实际答案与建议分开了?你会认为你会先阅读第一个问题的第一部分......我甚至在我的答案中使用了'ext/mysql'! – 2013-02-17 00:42:51

+0

我现在正在编辑我的评论,因为只有现在我注意到第一部分不是我的代码引用。我建议你编辑你的答案,添加“请试试这个:”,并且可能还解释你为什么使用这种方法。谢谢。 – Nuno 2013-02-17 00:44:15

-1
$result = mysql_query("SELECT COUNT(*) FROM table WHERE ......."); 

if(mysql_num_rows($result) > 1) 
{ 
echo 'at least 2 rows'; 
} 

else 
{ 
echo 'less than 2 rows'; 
} 
相关问题