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 :

auto jointure => résultat sur plusieurs lignes (et non sur plusieurs colonnes)


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2003
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 15
    Points : 17
    Points
    17
    Par défaut auto jointure => résultat sur plusieurs lignes (et non sur plusieurs colonnes)
    Bonjour,

    Je dispose d'une table qui représente des données sur plusieurs niveaux hiérarchiques (chaque ligne est reliée à un parent_id).

    Mon objectif c'est de retrouver toute l'arborescence à partir d'un noeud racine (where parent_id=NULL).

    Le problème que je recontre, c'est que le résultat de mon auto jointure est bon mais au lieu d'avoir des lignes supplémentaires, j'ai de nouvelles colonnes...

    On peut prendre l'exemple sur le site de mysql :
    http://dev.mysql.com/tech-resources/...ical-data.html

    On voit au début de leur article qu'ils retournent n colonnes : lev1, lev2, lev3,...

    Or moi , je souhaite avoir uniquement 2 colonnes en résultat :
    category_id et parent_id


    Extrait du site mysql (exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE category(
    category_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    parent INT DEFAULT NULL);
     
     
    SELECT *
    FROM category AS t1
    LEFT JOIN category AS t2 ON t2.parent = t1.category_id
    LEFT JOIN category AS t3 ON t3.parent = t2.category_id
    LEFT JOIN category AS t4 ON t4.parent = t3.category_id
    WHERE t1.name = 'ELECTRONICS';
    Résultat recherché :
    3 colonnes avec n tuples résultat de ma jointure.

    avec Oracle, c'est facile : on utilise le "connect by prior"
    avec SQL Server, c'est facile : on utilise une vue pour faire de la récursivité (WITH() + UNION ALL)

    et avec MySQL ?

    ps : http://www.sitepoint.com/article/hie...data-database/
    là ils font une requête par niveau... ce que je veux éviter

  2. #2
    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 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Cet article de SQLPro te donnera une autre piste de réflexion.
    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 !

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/08/2009, 21h14
  2. [MaxDB] plusieures lignes du maxdb_fetch_array sur une ligne d'un tableau
    Par nicoda dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/02/2008, 16h52
  3. plusieurs lignes de texte sur un bouton
    Par sefir dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/06/2007, 22h17
  4. Réponses: 2
    Dernier message: 21/09/2005, 12h18
  5. selection sur une table en fonction de plusieurs ligne
    Par dimdidi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/12/2004, 08h42

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