Maison >base de données >tutoriel mysql >Comment appliquer correctement le filtrage de clause WHERE dans les requêtes SQL complexes ?
Problème de priorité du paramètre WHERE dans l'instruction SQL
La requête SQL suivante est conçue pour récupérer les données de la table "people" et limiter les résultats aux enregistrements avec "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>
Cependant, cette requête a produit des résultats inattendus au-delà de la condition « university=2 ». Pour résoudre ce problème, nous devons nous assurer que la condition « université=2 » limite strictement les résultats de la recherche.
Ajustez les crochets pour contrôler l'ordre des opérations
Le problème avec cette requête est l'utilisation inappropriée des parenthèses, qui affecte l'ordre d'évaluation de l'expression. Dans la requête d'origine, « AND » a une priorité plus élevée que « OR », ce qui signifie qu'il est évalué en premier. Par conséquent, "university=2" est uniquement combiné avec "MATCH (lname,fname) AGAINST ('massive' IN BOOLEAN MODE)" et non avec le test "fname/lname".
Pour corriger cela, nous devons ajuster les parenthèses pour garantir que "university=2" soit combiné avec l'ensemble des critères de recherche :
<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>
Avec cet ajustement, la condition « université=2 » est désormais mise entre parenthèses, indiquant qu'elle doit être évaluée en premier puis combinée avec les conditions de recherche dans le deuxième jeu de parenthèses. Cela garantit que seuls les enregistrements pour lesquels « university=2 » est vrai seront pris en compte dans la recherche.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!