条件付き SELECT クエリ: 行数に基づいた代替クエリの実行
PHP スクリプトを最適化するには、動的に実行する方法を探しています。最初のクエリがゼロ行を返した場合にのみ、2 番目の SELECT クエリを実行します。 MySQL でこれを実現する方法は次のとおりです。
1 つの方法は、ネストされた IF ステートメントを使用して、最初のクエリの行数を比較することです。
IF (SELECT COUNT(*) FROM proxies WHERE A='B') > 0 THEN SELECT * FROM proxies WHERE A='B' ELSEIF (SELECT COUNT(*) FROM proxies WHERE A='C') > 0 THEN SELECT * FROM proxies WHERE A='C' END IF
ただし、この方法では各クエリが実行されます。各条件に対して 2 回。より適切な最適化を行うには、EXISTS 演算子とともに UNION ALL を使用することを検討してください。
SELECT * FROM proxies WHERE A='B' UNION ALL SELECT * FROM proxies WHERE A='C' AND NOT EXISTS ( SELECT 1 FROM proxies WHERE A='B' )
このクエリは、最初に A='B' を持つ行を検索し、それらを返します。 A='B' の行が見つからない場合は、A='C' の行をフェッチし、クエリが 1 つだけ実行されるようにします。
SQL Fiddle のデモはここにあります: [リンク]
このアプローチでは、最初のクエリがゼロ行を返した場合にのみ 2 番目のクエリが効率的に実行され、PHP スクリプトのパフォーマンスが向上します。
以上が最初のクエリがゼロ行を返した場合にのみ、MySQL で 2 番目の SELECT クエリを効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。