IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

afficher et ORDONNER contenu différent de plusieurs champs


Sujet :

MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 223
    Points : 68
    Points
    68
    Par défaut afficher et ORDONNER contenu différent de plusieurs champs
    Bonjour,
    J'ai déjà fait pas mal de chose à mon (tout) petit niveau, mais là je suis confrontée à un nouveau problème, et je ne sais pas où trouver la solution...

    Je "travaille" avec php et mysql.
    Dans une table j'ai 6 champs, nommés mots-cles1, mots_cles2, etc.
    Je cherche avec quelle requête afficher la liste des mots-clés de ces 6 champs, mais sans les doublons, sachant que chaque mot-clé peut être indifféremment dans n'importe lequel de ces 6 champs.

    Y a-t-il une possibilité ?
    Vers quoi orienter mes recherches svp ?
    Merci !

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Avec mon (tout) petit niveau, je ferai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mots_cles1 AS mots_cles FROM ta_table
    UNION SELECT mots_cles2 AS mots_cles FROM ta_table
    ...
    UNION SELECT mots_cles6 AS mots_cles FROM ta_table

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faudrait surtout revoir le modèle de données !
    Pourquoi avoir réparti les mots-clés dans 6 colonnes (et pas champs ! ) ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 223
    Points : 68
    Points
    68
    Par défaut
    Merci de vos réponses, je viens juste de les découvrir... mais je ne comprends pas vraiment ce que CinePhil veut dire...
    C'est vrai que je ne savais pas comment faire pour les mots-clés (je ne sais toujours pas d'ailleurs !). Au début j'avais créer un seul champ (je ne comprends pas la différence entre champ et colonne ) mots-cles en text, et je mettais un mot-clé par ligne, en me disant que je saurais bien les isoler ensuite. Mais comme je n'ai pas trouver comment faire, j'ai limité mon nombre de mots-clés à 6 et j'ai créé 6 champs.
    Mais je me retrouve coincé de la même façon...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 223
    Points : 68
    Points
    68
    Par défaut
    Merci pour la requete Fred_34, c'est impec' ! je m'en servirai si j'arrive pas à faire "plus propre" !

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Tes mots clés se rapportent à quelque chose. Imaginons que ce soit à un article.

    Tu as la règle de gestion suivante :
    Un article peut être indexé par plusieurs mots clés et un mot clé peut indexer plusieurs articles.

    Ce qui donne le MCD (méthode Merise) suivant :
    mot_cle -0,n----indexer----0,n- article

    Et ce qui entraîne la création des tables suivantes :
    mot_cle (mcl_id, mcl_mot)
    article (art_id, art_titre, art_texte...)
    mcl_indexer_art (mia_id_mot_cle, mia_id_article)

    Quels sont les mots clés associés à l'article "MySQL : Un SGBDR poudre aux yeux !" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT m.mcl_mot
    FROM mot_cle m
    INNER JOIN mcl_indexer_art ma ON ma.mia_id_mot_cle = m.mcl_id
    	INNER JOIN article a ON a.art_id = ma.mia_id_article
    WHERE a.art_titre = 'MySQL : Un SGBDR poudre aux yeux !'
    Quels sont tous les articles associés au mot-clé "MySQL" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT a.art_id, a.art_titre
    FROM article a
    INNER JOIN mcl_indexer_art ma ON ma.mia_id_article = a.art_id
    	INNER JOIN mot_cle m ON m.mcl_id = ma.mia_id_mot_cle
    WHERE m.mcl_mot = 'MySQL'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 223
    Points : 68
    Points
    68
    Par défaut
    Oulala C'est effectivement ce que je veux faire si je comprends bien, mais je ne pensais pas que c'était si compliqué... Malgré tout, je crois que je comprends. Créer une table de mots-clés séparée, j'avoue y avoir pensé, mais pas très longtemps...
    Je m'y colle maintenant. Merci beaucoup Philippe pour ton aide !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 223
    Points : 68
    Points
    68
    Par défaut
    Je reviens ici parce que je rame...

    Avant de faire ce que tu me proposes, je cherche à tout bêtement afficher la liste de mes articles, avec sous chacun d'eux, le ou les mot-clés qui y sont associés.
    Eh ben je n'y arrive pas !

    J'en suis là (je me suis inspirée de ce que tu as fait, mais je suis pas trop sûre de moi), mais j'ai une erreur Not unique table/alias: 'a' et je ne la comprends pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    	FROM histoire a, hist_motcle m, hist_indexer 
    	INNER JOIN hist_indexer ma ON ma.hist_index_mcl = m.ID_motcle
    	INNER JOIN histoire a ON a.ID_hist = ma.hist_index_article
    Peux-tu m'expliquer ce que veut dire l'erreur stp ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Tu as une erreur car tu mélanges les deux façons d'écrire les jointures.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    	FROM hist_motcle m
    	INNER JOIN hist_indexer ma ON ma.hist_index_mcl = m.ID_motcle
    	INNER JOIN histoire a ON a.ID_hist = ma.hist_index_article

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 223
    Points : 68
    Points
    68
    Par défaut
    Merci Fred, l'erreur a disparu !
    Mais ce n'est pas le résultat escompté, donc ce n'est pas ça que je devais faire comme requête...
    La liste d'articles (table histoire) s'affiche bien, mais par exemple, pour l'article n°26 auquel sont associés 3 mots-clés, eh bien il s'affiche 3 fois, chaque fois avec un des mots-clés !

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par evevev Voir le message
    La liste d'articles (table histoire) s'affiche bien, mais par exemple, pour l'article n°26 auquel sont associés 3 mots-clés, eh bien il s'affiche 3 fois, chaque fois avec un des mots-clés !
    Ce résultat est plutôt cohérent par rapport à ta demande initiale :
    Citation Envoyé par evevev Voir le message
    ... je cherche à tout bêtement afficher la liste de mes articles, avec sous chacun d'eux, le ou les mot-clés qui y sont associés.
    Précise le résultat que tu attends, car pour moi, "avec sous chacun d'eux" n'est pas très clair...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 223
    Points : 68
    Points
    68
    Par défaut
    T'as raison, c'était pas très clair...
    A chacun des articles (de presse, ce sont des articles de journaux anciens), j'associe un, deux ou trois mots-clés.
    Par exemple, l'article n°26, c'est un fait divers qui raconte un meurtre, comme mot-clé je lui ai associé (dans la table hist_indexer) les mots-clés fait divers, meurtre, et leNomduVillage.
    Dans la liste qui montrent tous les articles, je voudrais que cet article n°26 ne s'affiche qu'une seule fois, mais que les trois mots-clés le concernant s'affichent juste sous lui.
    Et pareil évidemment pour toute la liste d'articles.

    (Les mots-clés sont la dans table hist_motcle.)

Discussions similaires

  1. Réponses: 12
    Dernier message: 10/08/2007, 15h45
  2. [MySQL] Comment affiché un résultat avec plusieurs lignes et plusieurs champs dans un tableau
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 15/05/2007, 14h19
  3. Réponses: 7
    Dernier message: 15/03/2007, 08h50
  4. Réponses: 2
    Dernier message: 17/02/2007, 12h34
  5. Afficher plusieurs champs dans une listbox
    Par fabien.benard dans le forum IHM
    Réponses: 2
    Dernier message: 14/11/2006, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo