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

Langage PHP Discussion :

Requête sur 4 tables MySQL


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut Requête sur 4 tables MySQL
    Bonjour,

    J'ai 4 tables: livres, titres, descriptions, chapitres, comment faire une requete afin d'avoir une structure comme celle la:

    + Livre1
    ++ Titre1
    +++ Description1
    ++++ Chapitre1
    ++++ Chapitre2

    + Livre2
    ++ Titre2
    +++ Description2
    ++++ Chapitre1
    ++++ Chapitre2
    ++++ Chapitre3
    ++++ Chapitre4

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut bien séparer
    1 - requete
    2 - présentation

    A quel niveau se situe ta difficulté ? Qu'as tu déjà fait ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Il faut bien séparer
    1 - requete
    2 - présentation

    A quel niveau se situe ta difficulté ? Qu'as tu déjà fait ?
    J'ai fais 3 requetes simples, comme suite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sql1 = "select.."
    while () {
     
    sql2..
    sql3..
    }
    Ce que je veux faire c'est de regrouper les 2 sql entre la boucle en une seule, sous la reserve de WHERE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sql2 = "SELECT * FROM table1 WHERE id_des=id_livre"
    sql3 = "SELECT * FROM table2 WHERE id_ch=id_livre"

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu veux faire une UNION sql entre les deux requetes ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu veux faire une UNION sql entre les deux requetes ?
    J'ai fait comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    sql2 = "SELECT * FROM table1 WHERE id_des=id_livre";
    $sql2 .= " UNION ";
    $sql2 .= "SELECT * FROM table2 WHERE id_ch=id_livre";
     
    //.. continue de code
     
    while ($row = mysql_fetch_array($result)) {  
     
    extract($row);
     
    }
    Il m'affiche les resultats de la 1ere requete qui est table1 et n'affiche pas les resultats de la 2eme table.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Et si tu ne mets que la deuxieme (c'est à dire est ce que la deuxieme requete retourne quelque chose) ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Et si tu ne mets que la deuxieme (c'est à dire est ce que la deuxieme requete retourne quelque chose) ?
    Si je mets la 2eme requete seule, il me retourne le resultat, mais les 2 a la fois, ca me retourne que la 1ere requete

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Et executé dans phpmyadmin ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 48
    Par défaut
    Si tu veux tout récupérer pourquoi pas une requête de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from `livres` 
    left outer join `titres` on `titres`.`id` = `livres `.`id`
    left outer join `descriptions ` on `descriptions `.`id` = `titres`.`id`
    left outer join `chapitres ` on `chapitres `.`id` = `titres`.`id`
    Enfin quelque chose dans le genre.

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Et executé dans phpmyadmin ?
    Il me retourne le meme nombre de resultats, mais sans afficher les donnees de la 2eme requete

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Quelle est la structure de tes deux tables ?
    Je suis en particulier perplexe sur la presence de la colonne id_livre dans les deux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Quelle est la structure de tes deux tables ?
    Je suis en particulier perplexe sur la presence de la colonne id_livre dans les deux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    # Les genres des livres (Sciences, Sports,..)
    CREATE TABLE IF NOT EXISTS `genre` (
      `id` int(1) NOT NULL auto_increment,
      `genre` varchar(40) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;
     
    # La liste des livre suivant le genre ou la categorie choisie
    CREATE TABLE IF NOT EXISTS `livres` (
      `id_livre` int(5) NOT NULL auto_increment,
      `livre` varchar(50) collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`id_livre`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    # Les titres des livres, ca veut dire que le livre est divise en sections
    CREATE TABLE IF NOT EXISTS `titres` (
      `id_titre` int(10) NOT NULL auto_increment,
      `id_livre2` bigint(10) NOT NULL,
      `classement` bigint(20) NOT NULL,
      `livre` longtext collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`id_titre`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=15 ;
     
    # La description de chaque section (titres)
    CREATE TABLE IF NOT EXISTS `desc` (
      `id_des` int(5) NOT NULL auto_increment,
      `id_titre2` bigint(5) NOT NULL,
      `desc` longtext collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`id_desc`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
     
    # Les chapitres de chaque section (titres)
    CREATE TABLE IF NOT EXISTS `chapitres` (
      `id_ch` int(20) NOT NULL auto_increment,
      `id_titre3` int(10) NOT NULL,
      `chapitre` longtext collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`id_ch`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=22 ;
    La structure:

    En cliquant sur un genre, je veux avoir une telle structure:

    + Livre1
    ++ Titre1
    +++ Description1
    ++++ Chapitre1
    ++++ Chapitre2

    + Livre2
    ++ Titre2
    +++ Description2
    ++++ Chapitre1
    ++++ Chapitre2
    ++++ Chapitre3
    ++++ Chapitre4

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    table1 et table2 dont tu nous parlais c'etait quoi ?

    Sinon pour ton resultat, plutot qu'une jointure qui recupererait des informations redondantes, je te propose de faire une boucle qui lit les informations sur le livre (livre, titre, description) a l'interieur de laquelle tu mets un boucle qui lit les informations sur les chapitre du livre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 425
    Par défaut
    Citation Envoyé par sabotage Voir le message
    table1 et table2 dont tu nous parlais c'etait quoi ?

    Sinon pour ton resultat, plutot qu'une jointure qui recupererait des informations redondantes, je te propose de faire une boucle qui lit les informations sur le livre (livre, titre, description) a l'interieur de laquelle tu mets un boucle qui lit les informations sur les chapitre du livre.
    Merci sabotage, je vais utiliser 3 requetes au lieu de 2, puisque la solution est un peu complexe

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

Discussions similaires

  1. Requête sur plusieurs Tables Jointes - Mysql 5.5
    Par jérix_kouame dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/05/2012, 10h38
  2. [MySQL] Requête sur 4 tables - problème liaison / count
    Par Angel31 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/03/2012, 17h02
  3. Réponses: 2
    Dernier message: 26/03/2010, 11h10
  4. Requête sur 2 tables ?
    Par kibodio dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/03/2005, 16h57
  5. Requête sur 2 tables et surtout novice...
    Par kibodio dans le forum Langage SQL
    Réponses: 13
    Dernier message: 03/03/2005, 16h45

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