[MySQL] Requêtes plus propres

Requêtes plus propres [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 08-11-2005 à 10:42:29    

bonjour tout le monde.
 
Cela va vous paraitre une question de base mais j'ai testé différents trucs qui n'ont pas fonctionnés donc je m'en remet à vous :)
En fait j'ai un script PHP qui génère une requete pour mySQL, et en fait donc ca se présente sous forme de checkbox, la personne peut choisir 4 niveaux d'alertes différentes, ainsi que 3 firewalls différents.
Elle peut donc choisir d'afficher un seul niveau d'alerte, ou 2, ou 3 ou même 4, et de même pour les firewalls.
 
En admettant qu'elle choisissent tout, ca me donne une requête particulièrement lourde telle que :
 
SELECT date,level,firewall,message from `source` WHERE (level='Alert' OR level='Warning' OR level='Notice' OR level='Info') AND (firewall='NS1' OR firewall='NS2' OR firewall='NS3')
 
 
Alors je me demandais si il n'y avais pas un moyen d'allèger tout ca.
Merci d'avance  :hello:  
 
Question subsidiaire : Comme vous avez vu dans le select, il y a un champ nommé 'message'. Je compte pour voir faire une fonction de recherche sur ce champ pour rajouter un filtre en plus. J'ai trouver sur divers site une technique utilisant la syntaxe 'AND message LIKE '%machin%' ' ou une méthode avec index FULLTEXT.
Mais je n'arrive pas à comprendre la différence entre les 2. De plus, lorsque je fais la recherche sur le mot SSH, la méthode FULLTEXT ne renvoie rien alors qu'avec les LIKE ca marche. si vous pouviez juste me mettre quelques lignes sur ca car je pense pas utile de faire un autre topic.


---------------
Mon Feedback !
Reply

Marsh Posté le 08-11-2005 à 10:42:29   

Reply

Marsh Posté le 08-11-2005 à 10:55:28    

L'ecriture des recherches fulltext n'est pas pareille que le like. Là il faut consulter la doc MySql.
 
L'avantage du FullText est qu'il va etre beaucoup plus rapide qu'un like. Le like est brute de fonderie et n'exploite pas les index. Alors que le FullText est un index construit pour ameliorer la recherche dedans.
 
Pour ta requete, tu peux dejà faire:
 

Code :
  1. SELECT date, level, firewall, message
  2. FROM `source`
  3. WHERE level IN ('Alert', 'Warning', 'Notice', 'Info')
  4. AND firewall IN ('NS1', 'NS2', 'NS3')


Message édité par cinocks le 08-11-2005 à 10:55:52

---------------
MZP est de retour
Reply

Marsh Posté le 08-11-2005 à 11:06:43    

Je connaissait pas les 'IN', merci beaucoup je vais tester ca tout de suite.
 
Et je te remercie pour la petite explication sur les recherches.
 
:jap:


---------------
Mon Feedback !
Reply

Marsh Posté le 08-11-2005 à 11:09:54    

au plaisir


---------------
MZP est de retour
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed