SQL ステートメントの WHERE パラメータの優先事項
次の SQL クエリは、「people」テーブルからデータを取得し、結果を「university=2」のレコードに限定するように設計されています。
<code class="language-sql">SELECT * FROM people WHERE university='2' AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE) OR (fname LIKE '%box%' OR lname LIKE '%box%') </code>
ただし、このクエリでは、「university=2」条件を超える予期しない結果が生成されました。この問題を解決するには、「university=2」条件によって検索結果が厳密に制限されるようにする必要があります。
括弧を調整して操作の順序を制御します
このクエリの問題は、式の評価順序に影響を与える括弧の不適切な使用です。元のクエリでは、「AND」は「OR」よりも優先順位が高く、最初に評価されることを意味します。その結果、「university=2」は「MATCH (lname,fname) AGAINST ('massive' IN BOOLEAN MODE)」とのみ結合され、「fname/lname」テストとは結合されません。
これを修正するには、「university=2」が検索条件全体と組み合わされるように括弧を調整する必要があります。
<code class="language-sql">SELECT * FROM people WHERE university='2' AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE) OR fname LIKE '%box%' OR lname LIKE '%box%') </code>
今回の調整により、「university=2」条件が括弧で囲まれるようになり、最初に評価してから 2 番目のかっこ内の検索条件と組み合わせる必要があることを示しています。これにより、「university=2」が true であるレコードのみが検索で考慮されるようになります。
以上が複雑な SQL クエリで WHERE 句フィルタリングを正しく適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。