requete SQL pour trouver un mot dans un champ

Mammouth du PHP | 536 Messages

19 nov. 2007, 16:26

Bonjour,

je voudrais savoir comment faire (je vous demande pas la solution mais les outils uniquement) pour faire une construire une requête SQL pour chercher un mot dans différents champs d'une table.
Il faudrait que je puisse trouver le mot "exemple" parmis tout le texte inscrit dans un champ LONGTEXT de ma table (une sorte de moteur de recherche).

Comment faire, quels outils SQL utiliser ?


Je pense avoir trouver, je vais utilsier

Code : Tout sélectionner

WHERE xxxxx LIKE '% mot_a_chercher %'
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 nov. 2007, 16:51

ATTENTION : cette manière de faire (LIKE '%...%') est un gouffre pour ton serveur de base de données.
Tu vas écrouler les performances de ton application, de ton serveur (et si tu es sur un serveur mutualisé, tu risques même de représailles de ton hébergeur)

Pour ce que tu cherches à faire, il existe les recherches en fulltext
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 536 Messages

19 nov. 2007, 17:20

Merci du conseil, j'ai alors lu la documentation que tu as linkée et lorsque je fais cette requête

Code : Tout sélectionner

SELECT * FROM table WHERE MATCH (champ1,champ2) AGAINST ('texte à trouver');
j'ai ce message d'erreur
#1191 - Can't find FULLTEXT index matching the column list
Pourquoi ? Qu'est-ce que ça signifie ?

[EDIT] : c'est bon, il suffisait que je mette mes champs en fulltext. Par contre, ces requêtes ne archent pas sur les champs du type date et year ?
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

19 nov. 2007, 18:06

Les index FULLTEXT sont utilisés avec les tables MyISAM et peuvent être créés depuis des colonnes de types CHAR, VARCHAR, ou TEXT ...
C'est pourtant au tout début de la doc :roll:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 4039 Messages

19 nov. 2007, 22:48

eum.. tu es sur d'avoir besoin d'un champ LONGTEXT ? Tu comptes y enregistrer des films ? des dvd's ?

Personnellement, je vois mal la nécessité d'un champ textuel pouvant aller jusqu'a 4Go.. à mon avis, MEDIUMTEXT avec ses 16 mo's me parait largement assez pour tout. (et même TEXT...)


Après petite enquête.. y'a moyen de mettre Tout Wikipedia (version anglaise) dans un tel champ.. super pratique !! (Wikipedia compte plus de 3.500.000.000 caractères)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.