Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retourner tableaux à plusieurs dimensions

Possible?

    10 janvier 2011 à 16:59:42

    Bonjour,

    J'ai deux tables sql:

    table: client

    - idClient
    - nom

    table: image

    - idImage
    - fk_idClient
    - url
    - description

    Un client peut avoir plusieurs images, j'aimerais faire une requête qui me retourne la liste des images pour chaque clients, pour tout les clients...comment faire?

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2011 à 22:13:00

      Tu peux nous donner un exemple de résultat que tu aimerais ?
      • Partager sur Facebook
      • Partager sur Twitter
        10 janvier 2011 à 23:03:34

        Salut,
        Tu devrais t'en sortir avec GROUP_CONCAT sur le champ url, qui te retournera une liste d'url séparée par des virgules pour chaque client.
        Enfin, comme le dit Shepard, tout dépend de ce que tu souhaites récupérer.

        Bonne soirée :).
        • Partager sur Facebook
        • Partager sur Twitter
          11 janvier 2011 à 7:42:14

          Bonjour,

          Je me rend compte que c'est pas au niveau du sql mais du php que je devrais construire mon tableau comme j'ai envie, J'aimerais obtenir un tableau de ce style en php:

          Array (
              0 => array (
                  [idCLient] => 1
                  [nom] => Nom 1
                  [images] => array (
                      0 => array (
                         [idImage]
                         ...
                      )
                  )
              )
           
              1 => array (
                  [idCLient] => 2
                  [nom] => Nom 2
                  [images] => array (
                      0 => array (
                         [idImage]
                         ...
                      )
                  )
              )
          )
          


          en faisant un simple SELECT de toutes mes images, après je dois jouer avec le fk_idClient, mais je vois pas trop comment faire...à chaque fois comparer le dernier fk_idCLient?

          Merci
          • Partager sur Facebook
          • Partager sur Twitter
            11 janvier 2011 à 9:03:50

            Si tu utilises un SGBDR qui connait les arrays (PostgreSQL par exemple), c'est possible (et très facile) :

            SELECT idClient, nom, array_agg(idImage)
            FROM client
            INNER JOIN image
                ON idClient = fk_idClient
            GROUP BY idClient, nom;
            


            Je sais pas comment PHP réagit à ça par contre.

            Mais bon, tu peux simuler ceci avec MySQL avec GROUP_CONCAT et explode avec un truc dans le genre :

            SELECT idClient, nom, GROUP_CONCAT(idImage) AS images
            FROM client
            INNER JOIN image
                ON idClient = fk_idClient
            GROUP BY idClient, nom;
            

            Puis, tu utilises explode en PHP sur la colonne images.
            • Partager sur Facebook
            • Partager sur Twitter
              11 janvier 2011 à 10:13:36

              Merci pour la réponse, je ne connaissais pas GRUP_CONCAT(), mais J'ai oublié de dire que j'aimerais aussi récupérer l'url de l'image et la description.

              Dans ce cas je pense que c'est pas possible sous Mysql?

              Merci
              • Partager sur Facebook
              • Partager sur Twitter
                11 janvier 2011 à 19:06:36

                Tu pourrais ajouter d'autres GROUP_CONCAT, tu aurais trois arrays "dans l'ordre". Mais bon, c'est moche, aussi bien sélectionner les données dont tu as besoin et faire le formatage en PHP.
                • Partager sur Facebook
                • Partager sur Twitter

                Retourner tableaux à plusieurs dimensions

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown