2

特定の条件のテーブルに少なくとも 2 つの行があるかどうかを確認するより良い方法はありますか?

この PHP コードを見てください。

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

私がこれを嫌う理由は、MySQL が一致するすべての行を取得してカウントすると想定しているためです。これは、大きな結果では遅くなる可能性があります。

2 つの行が見つかったときに 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

以下のクエリは、リクエストに応じて 2 つの行のみを検査します。 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 に答える