C'est moi qui devient folle ou quoi?

Résolu
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   -  
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je vais devenir chèvre avec une requête tout simple qui ne veut pas fonctionner...
Voici ma requête:

SELECT *, MATCH ('nom') AGAINST ('meuble') AS cpt FROM articles_temp
WHERE MATCH ('nom') AGAINST ('meuble')
ORDER BY cpt DESC

et voici ma table

CREATE TABLE IF NOT EXISTS 'articles_temp' (
'id' int(5) NOT NULL,
'nom' varchar(100) NOT NULL,
'epoque' varchar(50) NOT NULL,
'valeur' varchar(10) NOT NULL,
'couleur' varchar(50) NOT NULL,
'matiere' varchar(50) NOT NULL,
'description' varchar(100) NOT NULL,
'categorie' varchar(50) NOT NULL,
'etat' varchar(50) NOT NULL,
'urlphoto' varchar(50) NOT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'id' ('id'),
FULLTEXT KEY 'description' ('description'),
FULLTEXT KEY 'nom' ('nom'),
FULLTEXT KEY 'couleur' ('couleur'),
FULLTEXT KEY 'matiere' ('matiere')
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table 'articles_temp'
--

INSERT INTO 'articles_temp' ('id', 'nom', 'epoque', 'valeur', 'couleur', 'matiere', 'description', 'categorie', 'etat', 'urlphoto') VALUES
(16, 'meuble de metier', '', '', '', '', ' un beau meuble', 'Meubles', '', 'e2c2f56789fc60c0f321869e1c748ac1'),
(17, 'Lot de vases', 'contemporain', '', '', 'verre', ' utilisez-les en vases ou en verres, peu importe !', 'Vaisselle', 'neuf', '49793d3aa98d356c1f8aa84f2bc2754c');

Et ben rien à faire, ça me sort 0 résultat !!! Pourquoi ?

A l'aide!!! :-)

4 réponses

ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   2
 
non,hélas, ça me renvoie une erreur sql, et puis j'ai besoin que ça me trie les résultats par ordre décroissant de pertinence.
je viens de tester tout simplement

SELECT * FROM articles_temp WHERE MATCH (nom) AGAINST ('meuble')

et là non plus ça ne trouve aucun résultat... :'(
mais merci quand même! :-)
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Et si tu tentes simplement ceci :
SELECT *,  MATCH (nom) AGAINST ('meuble') FROM articles_temp

(sans la clause WHERE, donc)
Tu obtiens quoi ?
0 pour les deux lignes ?

Xavier
0
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   2
 
oui, même sans clause where, j'ai 0 sur les deux lignes... :-(
Ça énerve, hein? ;-)
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Ah ah ! Oui :)
Du coup j'ai fait quelques recherches.
Et j'ai trouvé un truc : un mot qui apparaît dans au moins 50% des résultats n'est pas pris en compte !

D'après les explications sur https://dev.mysql.com/doc/refman/8.0/en/fulltext-natural-language.html , cela vient du fait qu'un mot trop courant dans un contexte contient une valeur sémantique faible dans ce contexte.

Si tu rajoutes quelques autres lignes sans le mot 'meuble', cela devrait donc aller mieux !

Sinon, il te reste toujours la syntaxe LIKE...
0
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   2
 
le problème, c'est que ça ne marche pas mieux avec 'metier' ou 'Lot'...
Je ne veux pas utiliser LIKE, c'est une requête bcp plus lourde, et surtout je voudrais comprendre!
Mais apparemment ça vient de la table, parce que j'ai testé cette même requête sur une autre table, et ça fonctionne nickel...
Pourtant elles sont configurées de la même façon ( FULLTEXT KEY 'nom' ('nom') etc.) donc je ne comprends pas d'où peut venir l'erreur...
0
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   2
 
(je dis plus lourde parce que là je teste pr une requête simple, mais au final j'ai besoin de faire la recherche de mot-clef sur plusieurs champs, avec pondération des champs, et là le LIKE devient assez galère...)
0
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   2
 
Au temps pour moi, j'avais mal compris ta suggestion, et en effet, en rajoutant d'autres lignes d'articles, ça me sort bien un résultat!!!!
MERCI MERCI MERCI !!!!!!! :-) :-D
0
Ravaltabav Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   36
 
Salut,
Ce n'est pas plutot cette commande que tu veux faire ?
SELECT * AS cpt FROM articles_temp
WHERE MATCH ('nom') AGAINST ('meuble') 
ORDER BY cpt DESC;


Je suis un peu rouillé en SQL, c'est peut-être faux.
-1