Version complète: sur le forum Webmaster Hub : Mysql select : recherche les mots commencant par A
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
Lentreprenaute
Bonjour,


Je souhaiterai interroger un table qui contient pour chaque profil une colonne avec les mots clés associés.

Je voudrai afficher les mots clés et éviter les doublons, si j'ai 10 inscrits qui utilise le mot agence, je voudrai generer un resultat qui n'en affiche qu'un.

Est ce que je peux gerer cela avec des requetes mysql?

Cordialement,
Florent
sarc
Bonjour,

SQL
SELECT DISTINCT id_membre WHERE mot LIKE "%a"


Essaye ça wink.gif
DuR0
Euh... On ne fait pas de DISTINCT sur une clé primaire...

Puis les mot qui commence par "A" se serait pas LIKE "A*" ou LIKE "A%"?
petit-ourson
CITATION(DuR0 @ mercredi 24 mai 2006, 18h39)
Euh... On ne fait pas de DISTINCT sur une clé primaire...

Puis les mot qui commence par "A" se serait pas LIKE "A*" ou LIKE "A%"?
*

Pourquoi pas de distinct sur une clef primaire ?
DuR0
Car une clef primaire est par définition unique...
sarc
Euh exact j'ai mis une bêtise (jsuis allé trop vite...)
SQL
SELECT DISTINCT mot, id_membre WHERE mot LIKE "%a" GROUP BY mot


Ca devrait être mieux...
petit-ourson
CITATION
Car une clef primaire est par définition unique...


Ah oui vu comme cela. Remarque rien nous dit que id_membre est unique tout au moins en dehors de la table des 'membres' :P

Edit : Ah non j'ai rien dit ... bon je vais boire un autre apéro, ça ira mieux après ;o)
DuR0
Ah ben non... Pas de DISTINCT et de GROUP BY...

"Aie... Aie... Mais Madame qu'ai je fais?"
- Regarde ta requête! Tu veux des baffes?

Ici pas besoin de GROUP BY... Aucune utilité.

et le LIKE je suis tjrs pas d'accord !
petit-ourson
id_membre n'a certainement rien d'une clef primaire.

SQL
SELECT id_membre, mot FROM matable WHERE mot LIKE 'a%'

Si le résultat de ma requete me retourne :

CODE
id_membre | mot
1 | agence
2 | agence
1 | attention

Faire une requête avec un distinct est correct.

SQL
SELECT DISTINCT id_membre FROM matable WHERE mot LIKE 'a%'

Je récupère :

CODE
id_membre
1
2
DuR0
Si id_membre n'est pas une clef primaire certainement smile.gif

Enfin je comprend plus trop son problème, c'est pas les doublons dans les mots qu'il essaye d'éviter?
petit-ourson
CITATION(DuR0 @ mercredi 24 mai 2006, 19h22)
Si id_membre n'est pas une clef primaire certainement smile.gif

Enfin je comprend plus trop son problème, c'est pas les doublons dans les mots qu'il essaye d'éviter?
*

Euh ... si je crois ...

SQL
SELECT DISTINCT mot FROM matable WHERE mot LIKE 'a%'

En fait on s'en fout du id_membre ...
DuR0
La pour moi c'est correcte smile.gif
petit-ourson
C'est sarc qui m'a mis sur la mauvaise voie ;o)
sarc
Bon c'est décidé je vais prendre un cachet d'aspirine et au lit, je boycotte le Hub le temps de me remettre...

Désolé pour toutes les âneries que j'ai pu écrire en deux posts seulement, je crois que la fatigue m'atteint au plus haut point...
Mea culpa.

Je laisse ça aux pros hypocrite.gif
Lentreprenaute
merci , je vous laisse vous mettre d'accord et je vois ca demain car moi, it's time to go :o)

c'est pas sympa de poser des questions et d'aller se promener, desole


Florent
petit-ourson
On a répondu, c'est la dernière requête.
smile
CITATION
Je voudrai afficher les mots clés et éviter les doublons, si j'ai 10 inscrits qui utilise le mot agence, je voudrai generer un resultat qui n'en affiche qu'un.


En lisant je comprends que tu veux eviter les doublons utilisés par plusieurs inscrits pour des mots clés.
Dans ce cas c'est mieux de creer une table à part pour tes mots clés et relier par par l'id inscrit.

Comme ca tu peux travailler sur ta table mot clé et aussi sur tes inscrits, tu gagnes en cohérence et plus besoin de distinct wink.gif
robinsonvendredi
CITATION(Lentreprenaute @ mercredi 24 mai 2006, 18h10)
je voudrai generer un resultat qui n'en affiche qu'un.
*


qui n'en affiche qu'un quoi ? un inscrit ? un mot clé ? quel rapport avec le titre de ta question ? c'est incompréhensible.

CITATION
Je voudrai afficher les mots clés qui commencent par A et éviter les doublons


+1

C'est tout simplement :

SELECT DISTINCT mot FROM matable WHERE mot LIKE 'A%'
Lentreprenaute
Merci de vos participations, je viens donc d'essayer cette ligne:

mon champ mot contient plusieurs mots comme je ne veux afficher que le mot recherché le code suivant me retourne tout le contenu de chaque champ contenant ABC, une idée, on est toujours dans des requetes mysql ou l'on doit passer par php.

CODE
$select = "SELECT DISTINCT mot FROM TB_mots WHERE mot LIKE 'ABC%' ";

$result = mysql_query($select,$link)  or die ('Erreur3 : '.mysql_error() );


while($row = mysql_fetch_array($result)) {
echo $row[O];          
           
         }



Florent
smile
T'as des mots qui existent en commencant par abc ?
Moi je ne n'en connais pas à par des sigles ou l'alphabet, je doute que tu as ceci dans ta table wink.gif
petit-ourson
CITATION(smile @ jeudi 25 mai 2006, 17h02) *
T'as des mots qui existent en commencant par abc ?
Moi je ne n'en connais pas à par des sigles ou l'alphabet, je doute que tu as ceci dans ta table wink.gif

Un ABCDéraires ;o)
mjauneau
abcès :-P (et "abc" entre dans le dico aussi je crois)...
smile
CITATION
Un ABCDéraires ;o)


Plutôt ABCdaires wink.gif

Abécédaire c'est pas mal mais ca marche pas ohmy.gif
Anonymus
abcisse, Abcident (de la route), abcolument (quoique..).
Si ce sont les mots écrits par les internautes, il faut s'attendre à tout biggrin.gif
Lentreprenaute
mouiais et si l'on revenait à ma derniere question!! faut arretez de vous soualer à l'abcynthe ! smile.gif

cherchez l'erreur !
Florent
petit-ourson
Je n'ai pas compris ta dernière question.
Spidetra
CITATION(Lentreprenaute @ jeudi 25 mai 2006, 12h32) *
mon champ mot contient plusieurs mots comme je ne veux afficher que le mot recherché le code suivant me retourne tout le contenu de chaque champ contenant ABC, une idée, on est toujours dans des requetes mysql ou l'on doit passer par php.



Pour en revenir à ta dernière question :
Tu vas effectivement être obligé de récupérer la totalité de ton champ et faire un traitement en Php. Je suppose que tu as un séparateur de mot et que tu pourras faire un split dessus.

Comme tu as plusieurs mots dans ton champ la syntaxe :
SQL
LIKE 'ABC%'

ne marche plus. Tu seras obligé d'utiliser :
SQL
LIKE '%ABC%'


Donc :
- tu ne détecte plus les mots qui commencent par ABC, mais les mots qui contiennent ABC
- Si tu as indexer ton champ, l'index ne sera pas utilisé avec la 2° syntaxe => perte de performance

Une structure possible aurait été :
- une table dictionnaire : IDMot, Mot ( unique, fulltext ). Un seul mot par ligne
- une table user : IDUser, userName
- une table mot2user : IDMot, IDUser
petit-ourson
si j'ai bien compris, va falloir aussi que tu changes ta requête SQL :

SQL
$select = "SELECT DISTINCT mot FROM TB_mots WHERE mot LIKE '%ABC%' ";
Lentreprenaute
ta rquete va me trouver tout ce qui contient ABC et non ce qui commence par ABC? moi je veux lister tout les mots commencant par a, puis b etc...

Si dans mon champ mot, j'ai : ABCXX XXABC XABCX etc... en tout cas merci de ton active participation.


Florent
petit-ourson
SQL
$select = "SELECT DISTINCT mot FROM TB_mots WHERE mot LIKE 'ABC%' OR mot LIKE ' ABC%'";


Après tu fais le reste en php pour simplifier les choses
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.