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

Mengapa Klausa SQL WHERE Saya Mengabaikan Parameter?

DDD
Lepaskan: 2025-01-19 10:06:10
asal
402 orang telah melayarinya

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:

SELECT * FROM people
WHERE
  university='2'
  AND MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
Salin selepas log masuk

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:

(university='2') AND (
  (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE))
  OR (fname LIKE '%box%' OR lname LIKE '%box%')
)
Salin selepas log masuk

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

SELECT * FROM people
WHERE
  (university='2')
  AND (MATCH (lname,fname) AGAINST ('+massive' IN BOOLEAN MODE)
       OR fname LIKE '%box%'
       OR lname LIKE '%box%')
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan