Rumah >pangkalan data >tutorial mysql >Mengapa Klausa SQL WHERE Saya Mengabaikan Parameter?

Mengapa Klausa SQL WHERE Saya Mengabaikan Parameter?

DDD
DDDasal
2025-01-19 10:06:10412semak imbas

Why Does My SQL WHERE Clause Ignore a Parameter?

Menyelesaikan masalah SQL WHERE Klausa: Mengapa Parameter Diabaikan

Pertanyaan SQL kadangkala boleh menghasilkan hasil yang tidak dijangka, terutamanya apabila klausa WHERE menggabungkan berbilang syarat. Ini selalunya berpunca daripada keutamaan dan pengelompokan operator yang salah.

Mari kita periksa senario di mana klausa WHERE nampaknya mengabaikan parameter:

<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>

Pertanyaan ini bertujuan untuk memilih rekod daripada jadual people dengan university ialah '2' dan carian teks penuh untuk padanan 'besar' atau yang pertama atau nama akhir mengandungi 'kotak'. Walau bagaimanapun, set hasil mungkin termasuk entri yang tidak memenuhi syarat university='2'.

Masalahnya terletak pada keutamaan pengendali SQL: AND diutamakan daripada OR. Pengumpulan tersirat pertanyaan ialah:

<code class="language-sql">(university='2') AND (
  (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE))
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
)</code>

Perhatikan bagaimana university='2' hanya digunakan pada carian teks penuh. Untuk membetulkannya, kami memerlukan kurungan eksplisit untuk memastikan syarat AND terpakai pada semua bahagian:

<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>

Dengan mengumpulkan semua syarat dalam kurungan, kami menguatkuasakan logik yang dimaksudkan, memastikan hanya rekod yang memenuhi semua kriteria yang ditentukan dikembalikan. Ini menyerlahkan kepentingan penggunaan kurungan yang teliti semasa membina fasal WHERE kompleks dalam SQL.

Atas ialah kandungan terperinci Mengapa Klausa SQL WHERE Saya Mengabaikan Parameter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn