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 :

[debutant]requete reflexive sur 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    administrateur système
    Inscrit en
    Mars 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : administrateur système

    Informations forums :
    Inscription : Mars 2004
    Messages : 52
    Points : 58
    Points
    58
    Par défaut [debutant]requete reflexive sur 2 tables
    Voila j'ai 2 tables voici le schema :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE `ttopics` (
      `id` int(10) unsigned NOT NULL DEFAULT '0',
      `sPath` varchar(255) DEFAULT NULL,
      `sDispname` text,
      `sTitle` text,
      `sDescription` text,
      PRIMARY KEY (`id`),
      UNIQUE KEY `sPath` (`sPath`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    et la deuxieme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `ttopicnarrow` (
      `idTopic` int(10) unsigned DEFAULT NULL,
      `idType` int(10) unsigned DEFAULT NULL,
      `idNarrowTopic` int(10) unsigned DEFAULT NULL,
      UNIQUE KEY `idTopic` (`idTopic`,`idNarrowTopic`) USING BTREE,
      KEY `FK_ttopicnarrow_1` (`idNarrowTopic`),
      CONSTRAINT `FK_ttopicnarrow_1` FOREIGN KEY (`idNarrowTopic`) REFERENCES `ttopics` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Exemple de donnee dan la table topics :

    id = 1 , sPath = voiture/ les autres champs me sont pas utile pour la requete
    id = 2 , sPath = vente/
    id = 3 , sPath = peugeot/
    id = 4 , sPath = bmw/
    Exemple dans la table ttopicnarrow :
    idtopics = 1 , idtopicnarrow = null
    idtopics = 1 , idtopicnarrow = 2
    idtopics = 2 , idtopicnarrow = 3
    idtopics = 2 , idtopicnarrow = 4
    ma requete doit donnee :

    voiture/vente/peugeot/
    voiture/vente/bmw/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT
    ttopics.sPath,
    ttopics.id, ttopicnarrow.idNarrowTopic, (select ttopics.sPath as suite from ttopics join ttopicnarrow on ttopicnarrow.idNarrowTopic = ttopics.id)
    FROM
    ttopics , ttopicnarrow
    where ttopics.id = ttopicnarrow.idTopic
    cette requete ne fonctionne pas car j'ai plus d'une valeur pour la sous requete


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select ttopics.id,  ttopics.sPath from ttopics
    union 
    select ttopicnarrow.idNarrowTopic , ttopics.sPath 
    from ttopicnarrow 
    inner join ttopics
    on ttopicnarrow.idNarrowTopic = ttopics.id
    Et cette requete j'ai la valeur BLOB qui s'affiche.

    Je suis sous Mysql 5.1

    Merci de votre aide.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Il faudrait faire autant de jointures sur la table ttopicnarrow qu'il y a de boucles récursives... Mais si on ne connaît pas ce nombre à l'avance, c'est plus compliqué à faire en SQL (voir impossible).
    Ou alors, il faut modifier la structure de la base en conséquence, comme c'est décrit dans le tutoriel ici.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre du Club
    Profil pro
    administrateur système
    Inscrit en
    Mars 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : administrateur système

    Informations forums :
    Inscription : Mars 2004
    Messages : 52
    Points : 58
    Points
    58
    Par défaut
    Merci pour votre réponse, je vais voir pour la transformer. Il s'agit d'une base existante donc déjà peuplée environ 750000.

    je vais mettre à tout hasard un exemple complet :

    ttopics :

    id = 1 , sPath = Top/Computers , sTitle = Computers
    id = 105 , sPath = Top/Computers/Graphics , sTitle = Graphics

    ttopicnarrow :

    idTopic = 4 idNarrowTopic = 105

    Je suis pas sur que cela change grand chose à mon problème

Discussions similaires

  1. Requete SELECT SUR +sieurs tables
    Par yanis97 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/09/2006, 13h30
  2. Requete MySQL sur plusieurs tables
    Par romulus67 dans le forum Requêtes
    Réponses: 10
    Dernier message: 03/07/2006, 17h45
  3. requête count sur deux tables
    Par psychoBob dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/06/2006, 15h12
  4. Réponses: 8
    Dernier message: 17/05/2006, 14h32
  5. Requete COUNT sur 3 tables
    Par Le-Cortex dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/09/2005, 10h39

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