Rumah >pangkalan data >tutorial mysql >Cara Menggunakan Penapisan Klausa WHERE dengan betul dalam Pertanyaan SQL Kompleks?
Isu keutamaan parameter WHERE dalam pernyataan SQL
Pertanyaan SQL berikut direka bentuk untuk mendapatkan semula data daripada jadual "orang" dan mengehadkan keputusan kepada rekod dengan "universiti=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>
Walau bagaimanapun, pertanyaan ini menghasilkan keputusan yang tidak dijangka melebihi syarat "universiti=2". Untuk menyelesaikan masalah ini, kita perlu memastikan bahawa syarat "universiti=2" mengehadkan hasil carian dengan ketat.
Laraskan kurungan untuk mengawal susunan operasi
Masalah dengan pertanyaan ini ialah penggunaan kurungan yang tidak betul, yang menjejaskan susunan penilaian ungkapan. Dalam pertanyaan asal, "DAN" mempunyai keutamaan yang lebih tinggi daripada "ATAU", yang bermaksud ia dinilai terlebih dahulu. Akibatnya, "universiti=2" hanya digabungkan dengan "MATCH (lname,fname) AGAINST (' masif' DALAM MOD BOOLEAN)" dan bukan dengan ujian "fname/lname".
Untuk membetulkannya, kita perlu melaraskan kurungan untuk memastikan bahawa "universiti=2" digabungkan dengan keseluruhan kriteria carian:
<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 pelarasan ini, syarat "universiti=2" kini disertakan dalam kurungan, menunjukkan bahawa ia harus dinilai dahulu dan kemudian digabungkan dengan syarat carian dalam set kurungan kedua. Ini memastikan bahawa hanya rekod yang "universiti=2" adalah benar akan dipertimbangkan dalam carian.
Atas ialah kandungan terperinci Cara Menggunakan Penapisan Klausa WHERE dengan betul dalam Pertanyaan SQL Kompleks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!