Mysql
 sql >> Base de données >  >> RDS >> Mysql

Que puis-je faire pour que ce SQL renvoie des résultats dans certaines situations ?

Vous devez changer certains de vos ET en OU, puis mettre les OU entre parenthèses.

En ce moment, vous avez besoin de l'un des MATCHs $vehicle et aussi les deux des correspondances $keyword. Au lieu de cela, je pense que vous voulez exiger l'un des $vehicle ou $correspondances de mots clés.

De plus, je pense que vous pouvez combiner les correspondances $keyword en un seul appel MATCH, n'est-ce pas ? Et je pense que la vérification LIKE par rapport à T.truck_number est redondante étant donné le MATCH qui inclut cette colonne. Dans ce cas, vous pouvez écrire cette section du SQL comme :

 AND (MATCH( T.truck_number, T.make, T.model, T.engine, T.vin_number,
      T.transmission_number, T.comments) AGAINST( '$vehicle' )
     OR MATCH( P.part_num, P.part_desc, P.part_ref,M.comments, M.work_done) 
     AGAINST( '$keywords' ))

Et j'inclus le commentaire obligatoire sur la protection contre l'injection SQL en échappant au SQL dynamique que vous créez.