C'est moi qui devient folle ou quoi?

Résolu/Fermé
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 22 sept. 2014 à 16:24
ephelya Messages postés 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 22 sept. 2014 à 18:01
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 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
22 sept. 2014 à 17:07
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 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 sept. 2014 à 17:13
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 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
22 sept. 2014 à 17:27
oui, même sans clause where, j'ai 0 sur les deux lignes... :-(
Ça énerve, hein? ;-)
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 sept. 2014 à 17:36
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 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
22 sept. 2014 à 17:55
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 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
22 sept. 2014 à 17:57
(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 289 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
22 sept. 2014 à 18:01
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 jeudi 17 juillet 2014 Statut Membre Dernière intervention 26 septembre 2014 36
22 sept. 2014 à 16:47
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