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

Requêtes MySQL Discussion :

requête casse-tête pour une seule table..


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut requête casse-tête pour une seule table..
    Bonjour,
    J'ai perdu beaucoup de temps à essayer de trouver une requête qui permettrais de prendre ce tableau :

    NoMotCle | MotCle | Cat | Scat1 | Scat2 | Scat3 |
    -------------------------------------------------
    1 |Accessoires| 17 | 25 | 1 | 3
    2 |Informatique| 13 | 3 | 9 | 12
    3 |Soins| 22 | 54 | 9 | 12
    4 |Telecom| 2 | 33 | 4 | 12
    ...

    ...j'aimerais sortir un tableau semblable à ma table de départ à la différence que à la place des numéros dans les champs Cat, Scat1, Scat2,Scat3 jaimerais pouvoir aller chercher le Motcle correspondant. Exemple à la ligne Telecom, à la place d'afficher 2 sous Cat j'aimerais y retrouver Informatique.

    Voici ma requête:
    SELECT table1.*, table2.Cat AS nom_de_categorie
    FROM motcle AS table1
    INNER JOIN motcle AS table2
    ON table1.NoMotCle = table2.NoMotCle

    J'ai essayer de mettre une sous requête à la place de "table2.Cat AS nom_de_categorie" mais SQL ne l'as pas prise

    Que faire !?!

  2. #2
    Membre averti
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Points : 353
    Points
    353
    Par défaut
    Peux tu me donner les tables concernés par la requête et leurs liens de gestion?

  3. #3
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    En fait il sagit de la seule table concerné.

    à l'affichage, je voudrais récupérer le numéro du mot clé se trouvant dans les champs(Cat, scat1,scat2,scat3)...puis le transformer en texte (le numéro sous Cat par exemple: il correspond à un MotCle qui correspond à un NoMotCle.

  4. #4
    Membre averti
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Points : 353
    Points
    353
    Par défaut
    D'accord je crois avoir compris ce que tu veux, mais je pense que tu pars dans la mauvaise direction.
    D'aprés ce que j'ai compris, tu veux une table avec des catégories et qui peuvent être sous-catégorie entre elles.
    Donc on peut avoir:
    Une catégorie peut détenir aucune ou plusieurs sous-catégories
    Une sous-catégorie peut composé aucune ou plusieurs catégories


    Une des solutions à ton probléme est de faire une association réflexive.


    Ou tu auras deux tables:
    categorie(NumCategorie, NomCategorie)
    detenir(NumCategorie_Mere#, NumCategorie_Fille#)

    La table categorie aura le numéro de la catégorie et sa désignation

    La table detenir fera les correspondances entre la catégorie et ses sous-catégories à l'aide des clés etrangéres.
    Par exemple si dans la table detenir tu as 1 dans le champs NumCategorie_Mere et les chiffres 3 et 4 dans le champs NumCategorie_Fille tu sauras que la catégorie "Accessoire" (NumCategorie=1) à pour sous-catégorie "Soins" (NumCategorie=3) et "Télécom" (NumCategorie=4)

  5. #5
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Super ! Merci beaucoup !


    Cette structure correspond bien à ce que je veux faire.
    Je vais mettre cela en pratique maintenant...

  6. #6
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    humm..
    j'ai créer une autre table "Detenir"
    Dès que je place un autre SELECT dans ma requête tout déraille.
    (#1242 - Subquery returns more than 1 row )
    J'ai pourtant besoin de faire 3 sous-requêtes pour faire afficher les mots plutôt que les chiffres.

    SELECT Categorie.NomCategorie as Cat,(SELECT Categorie.NomCategorie FROM Categorie, Detenir WHERE Detenir.NumCategorie_Fille = Categorie.NumCategorie)
    FROM Detenir
    INNER JOIN Categorie
    ON Detenir.NumCategorie_Mere = Categorie.NumCategorie

  7. #7
    Membre averti
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Points : 353
    Points
    353
    Par défaut
    Oui c'est normal la requête renvoie plus d'une ligne d'ou l'erreur.
    Il faudrai mettre IN à la place de =.

    J'ai fais la requête principal et ses deux sous-requêtes ca mets l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select NumCategorie, NomCategorie, (select NomCategorie FROM categorie 
    WHERE NumCategorie IN (select detenir.NumCategorie_Fille from detenir INNER 
    JOIN categorie as categorie1 ON detenir.NumCategorie_Mere = categorie1.NumCategorie)) as sousCategorie FROM categorie
    Par contre quand je fais les deux sous-requêtes seules ca m' affiche bien le résultat donc les noms des sous-sactégories, mais je ne comprends pas pourquoi ca ne marche pas quand je les greffes à la requête principal...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (select NomCategorie FROM categorie 
    WHERE NumCategorie IN (select detenir.NumCategorie_Fille from detenir INNER 
    JOIN categorie as categorie1 ON detenir.NumCategorie_Mere = categorie1.NumCategorie))
    Si quelqu'un plus calé que moi en requête peux venir nous aider.

    Sinon tu pourrais traiter le résultat dans le script php lors du stockages de la requête dans un tableau.

    Ou bien un peu moins bien, mettre le NomCategorie en clé primaire comme ca se sera le nom et non pas le numero qui s'affichera mais ce n'est pas conseillé.

  8. #8
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Merci,
    Je continue les recherches ...

  9. #9
    Membre averti
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Points : 353
    Points
    353
    Par défaut
    J'ai posé le probléme de la requête sur le forum Langage SQL et la solution a été trouvé pour la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c1.numcategorie, c1.nomcategorie,  c2.nomcategorie
    FROM categorie c1, categorie c2, detenir d1
    WHERE c1.numcategorie=d1.numcategorie_mere
    AND c2.numcategorie=d1.numcategorie_fille
    - http://www.developpez.net/forums/sho...66#post2426766

  10. #10
    Membre régulier Avatar de MikeV
    Profil pro
    Webmaster
    Inscrit en
    Mai 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2007
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Super ca fonctionne! Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Champ calculé comme valeur dans une requête analyses croisées avec une seule table
    Par The old fool dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/10/2014, 10h15
  2. [MySQL] mysqldump pour une seule table
    Par francoisch dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/09/2013, 18h47
  3. [2.x] Plusieurs entités pour une seule table
    Par JackStrieger dans le forum Symfony
    Réponses: 7
    Dernier message: 03/09/2013, 22h24
  4. casse tête pour choper des colones d'une requète ?:?
    Par hiul dragonfel dans le forum Langage
    Réponses: 3
    Dernier message: 12/11/2009, 17h57
  5. Table de jointure pour une seule table
    Par Louis-Guillaume Morand dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2005, 18h49

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