Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2011, 14h56   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 9
Points : 1
Points : 1
Par défaut Requête FULL-TEXT inversée

Bonjour,

Je cherche à faire une requête FULL-TEXT qui ne s'applique pas à la colonne d'une table, mais à un paramètre passé à une clause "WHERE". Les mots clefs de recherche sont par contre dans une table.
Pour résumer, je n'arrive pas à faire une fonction qui cherche quels sont les mots clefs de la table Keyword, sont présent dans ma chaine de caractère.

J'ai essayé des requêtes de type :
Code :
1
2
3
SELECT * 
FROM keywords 
WHERE MATCH ('je cherche les mots clefs dans cette chaine') AGAINST (value);
mais ca ne marche évidemment pas.

Merci de votre aide.

Pyrotech
pyrotech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h19   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Code :
1
2
3
SELECT les_colonnes_necessaires_et_pas_etoile
FROM keywords
WHERE value IN ('mot1', 'mot2'...)
Ou alors j'ai rien compris au besoin ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h33   #3
Invité de passage
 
Inscription : juillet 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 9
Points : 1
Points : 1
Non, ce n'est pas si simple :

J'ai une table de mot clef contenant des valeurs diverses, voir des bouts de phrase :
  • keyword
  • mon mot clef
  • value

Lorsqu'un utilisateur saisi un texte, je voudrais m'assurer que son texte ne contienne pas l'une des entrées présentes dans la table de mot clef.

Pour des questions de perf, je voudrais que cette opération se fasse côté BD plutôt que de descendre tous les mots clefs et de matcher chacun d'eux un à un.
pyrotech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 16h10   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Quelle est la structure de la table ?
Un petit exemple de données et de résultat attend en fonction d'une saisie de l'utilisateur ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 20h48   #5
Invité de passage
 
Inscription : juillet 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 9
Points : 1
Points : 1
Si je n'arrive pas à m'expliquer en Francais, je comprends mieux pourquoi Google n'a pu me donner de réponse... :s

Explication en code :
J'ai une table de mots clefs interdits :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
CREATE TABLE `keywords` (
  `key` varchar(200) NOT NULL,
  PRIMARY KEY  (`key`)
);
 
INSERT INTO `keywords` (`key`) VALUES
('keyword'),
('mon expression'),
('mot clef'),
('toto');
Je voudrais faire une fonction (en PHP) qui me renvoie un boolean m'indiquant si le texte passé en paramètre est valide.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
FUNCTION isTextValid($text) {
IF (un des mots clef est présent dans $text) {
RETURN false;
} else {
RETURN true;
}
 
isTextValid("ceci est un texte valide"); -> true;
isTextValid("toto fait du ski"); -> false;
isTextValid("l'expression est  valide") -> true;
isTextValid("mon expression n'est pas valide") -> false;
Pour des questions de performance, je voudrais pouvoir faire ca en BD, plutôt que de descendre tous les mots clefs, et faire :
Code :
1
2
3
4
5
6
7
 
foreach ($motclefs AS $motclef) {
  IF (strpos($motclef,$text) !== false) {
    RETURN false;
  }
}
RETURN true;
pyrotech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 21h21   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Soit $expression l'expression à tester.
Code :
1
2
3
SELECT COUNT(*)
FROM keywords
WHERE $expression LIKE CONCAT('%', KEY, '%')
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 22h58   #7
Invité de passage
 
Inscription : juillet 2007
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 9
Points : 1
Points : 1
La, je suis dégouté... Ca marche !!!
J'ai passé la moitié de la journée à chercher comment faire alors que ca se résume en une ligne.
Et moi qui m'égarait avec la recherche FULLTEXT
Franchement 1000 mercis.

Pyrotech
pyrotech est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h58.


 
 
 
 
Partenaires

Hébergement Web