Rechercher dans une table - SQL/NoSQL - Programmation
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 :
|
=> Comme ça, la recherche porte sur tous les champs du formulaire qui sont remplis.
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
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...
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
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 ?
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.
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
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...
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
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
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
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
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.