Dépannage d'une requête SQL : problème de filtre universitaire
Cette requête SQL cible la table "people", en utilisant plusieurs filtres pour affiner les résultats. Le problème est que la requête renvoie des enregistrements qui ne devraient pas passer le filtre universitaire. Cela provient de problèmes de priorité des opérateurs dans la clause WHERE
.
La requête d'origine souffre d'une application incorrecte des opérateurs AND
et OR
. La priorité plus élevée de AND
fait que la condition university='2'
est liée de manière incorrecte uniquement à l'opération MATCH
. Les filtres fname
et lname
sont évalués indépendamment, conduisant à des résultats inattendus.
La solution consiste à restructurer la requête pour appliquer le bon ordre des opérations :
<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>
En regroupant les filtres fname
et lname
à l'aide de parenthèses, nous nous assurons que la condition university='2'
s'applique aux trois critères. Cela garantit que seuls les enregistrements de l'université « 2 » satisfaisant au moins une des conditions basées sur le nom sont inclus dans la sortie.
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!