2

对于给定的条件,是否有更好的方法来检查表中是否至少有两行?

请看这个PHP代码:

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

我不喜欢这个的原因是因为我假设 MySQL 将获取并计算所有匹配的行,这对于大型结果可能会很慢。

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

谢谢你。

4

3 回答 3

4

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

使用此查询:

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

所有的工作都由内部查询完成,当它获得 2 行时停止。还要注意select 1,它可以让您提高一点效率,因为它不必从列中检索任何值 - 只是常量1

外部count(*)将最多计为 2 行。

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

于 2013-02-17T00:42:55.593 回答
1

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

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

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

于 2013-02-17T00:40:03.987 回答
-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';
}
于 2013-02-17T01:25:33.427 回答