Rechercher dans une table

Rechercher dans une table - SQL/NoSQL - Programmation

Marsh Posté le 19-07-2005 à 11:52:25    

Bonjour,
 
Je compte mettre en place un formulaire de recherche, cependant je vous voudrais que cette recherche se porte sur tout les champs d'une table. Et je ne sais ni par quoi, ni comment je dois procéder.
 
Quel syntaxe me proposez-vous ?
 
Mreci d'avance.

Reply

Marsh Posté le 19-07-2005 à 11:52:25   

Reply

Marsh Posté le 19-07-2005 à 12:01:13    

Y'a pas de solution miracle.
 
Mettons que ta table soit :
 
Article
-------
id
title
stitle
summary
body
author
 
Critères possibles :
 
like sur title
like sur stitle
like sur summary
like sur body
= sur author
 
La requête miracle :
 

Code :
  1. select id
  2. from article
  3. where ('$title' = '' or title like '%$title%')
  4. and ('$stitle' = '' or stitle like '%$stitle%')
  5. and ('$summary' = '' or summary like '%$summay%')
  6. and ('$body' = '' or body like '%$body')
  7. and ('$author' = '' or author = '$author')


 
=> Comme ça, la recherche porte sur tous les champs du formulaire qui sont remplis.

Reply

Marsh Posté le 19-07-2005 à 13:27:41    

et si je fais une syntaxe de ce genre :
SELECT id
FROM article
WHERE title LIKE '%$title%'
OR stitle LIKE ...
OR ... LIKE ...
 
Ca fonctionne ?
 
En tout cas merci pour l'astuce :)

Reply

Marsh Posté le 19-07-2005 à 14:31:30    

ouais, ça fonctionne aussi, mais faire des "OR" entre chaque critère, c'est moyen, parceque plus tu fait une recherche précise, et plus tu as de résultats...

Reply

Marsh Posté le 19-07-2005 à 14:39:49    

Par exemple, tu recherches un livres :
 
titre : le horla
=> Tu récupère 1 ligne
 
titre : le horla
auteur : guy de maupassant
 
=> tu te retrouve avec toute la bibliographie de la guitoune

Reply

Marsh Posté le 19-07-2005 à 16:24:47    

Ah ok, je comprend mieu. Merci beaucoup pour ton aide ;)

Reply

Marsh Posté le 19-07-2005 à 16:51:04    

J'ai oublié de préciser :
Je n'ai qu'un champ de recherche comme Google. C'est-à-dire que avec un mot clé, je regarde dans tout les champs s'il existe et j'affiche.
 
Je reprend toujours la même méthode que tu m'as proposé ou bien cela change quelque chose à ma syntaxe ?

Reply

Marsh Posté le 19-07-2005 à 17:08:30    

Ben là, t'es obligé de mettre un OR.
 
Seulement, là, c'est mal barré, parceque si je tapes :
 
"le horla maupassant"
 
=> Ben j'aurai aucune ligne. Il faut donc découper la chaîne en petits bouts, et comparer chaque mot dans chaque champ.
 
A ce moment, je te conseille d'utiliser les fonction de recherche sur texte intégral FREETEXT et CONTAINS, qui te permettront de faire des recherches plus rapides, et surtout pondérées en fonction du nombre d'occurrence de chaque mot trouvés.
 
Ainsi, tu auras un moteur de recherche réellement comparable avec celui de Google, puisqu'il sait même manger les mots mal orthographiés.

Reply

Marsh Posté le 19-07-2005 à 22:19:33    

Je te remerci beaucoup Arjuna de ton aide.
 
Si je vois que l'utilisation de FREETEXT et CONTAINS ne sont pas chiant, je les utiliserais. Sinon je prendrais la méthode un peu plus barbare avec les OR.
 
 
En tout cas merci encore, tu m'as bien aidé dans mon travail :)

Reply

Marsh Posté le 19-07-2005 à 22:29:00    

J'voudrais t'embêter encore une fois si cela ne t'ennui pas.
 
J'aurais voulu savoir comment on se sert de FULLTEXT et CONTAINS ?? J'suis totalement dépassé par les évènements... :(

Reply

Marsh Posté le 19-07-2005 à 22:29:00   

Reply

Marsh Posté le 20-07-2005 à 12:31:57    

Ben je ne connais pas du tout MySQL. Avec SQL Server c'est tout bête, je pense qu'avec MySQL aussi. Mais dans tous les cas, c'est différent :spamafote:
 
Faudrait que les gens qui connaissent MySQL se décident à répondre aux questions de temps en temps... Y'a que des réponses sur des trucs basics, ou alors pour d'autres SGBD en ce moment, ça me saoule de laisser dans la merde quelqu'un qui a repris espoir alors que j'ai commencé à l'aider :/

Reply

Marsh Posté le 20-07-2005 à 13:14:11    

Je trouverais bien un jour ou l'autre.
 
Les requêtes SQL server sont pareils que celles de MySQL ?
Sinon, si ca t'ennui pas, montre-moi quelle requête tu aurais fait sous SQL Server ?
 
Je te remerci d'avance :)


Message édité par AlphaZone le 20-07-2005 à 13:15:35
Reply

Marsh Posté le 20-07-2005 à 14:12:13    

Nan, ça ne marche pas du tout pareil, bien que les fonctions soient les mêmes.
 
Deplus, avec SQL Server, les fonctions "CONTAINS" et "FREETEXT" ne sont pas pratiques à utiliser, car ne retourne pas de pondération. Il faut utiliser les fonction "CONTAINSTABLE" et "FREETEXTTABLE", qui sont utilisables comme des tables. Mais elles n'existent pas du tout sous MySQL.
 
Je pense que tu peux faire une recherche sur ces fonctions dans la doc de MySQL, tu devrais avoir des infos précises et des exemples

Reply

Marsh Posté le 20-07-2005 à 14:20:00    

Ok j'vais voir ca. Merci encore :)

Reply

Sujets relatifs:

Leave a Replay

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