Partage
  • Partager sur Facebook
  • Partager sur Twitter

requete SQL recuperation

Sujet résolu
    19 octobre 2020 à 8:24:48

    Bonjour je vous expose mon problème j'ai 3 tables une table duree, une table tarif et une table categories

    j'aimerais pouvoir afficher le libelle de la duree une seule fois mais les tarif plusieurs fois mais sur la même ligne

    exemple pour 1 heure j'ai les tarifs 7€, 10€ , 15€

    donc : 

    |duree  |C1|C2  |C3|

    |--------|---|----|---|

    |1heure|7€|10€|15 |

    Je cherche mais je ne trouve pas la solution donc j'aimerais savoir si c'est possible svp

    -
    Edité par PicardSylvain 19 octobre 2020 à 8:31:57

    • Partager sur Facebook
    • Partager sur Twitter

    S.PICARD

      19 octobre 2020 à 9:59:52

      Bonjour,

      Ce que tu cherches à faire s'appelle un tableau croisé (PIVOT en anglais). Ce n'est pas un formalisme SQL au départ car il y a potentiellement un nombre de colonnes variables. Après certains SGBD s'en sont emparés plus ou moins. Quel SGBD et quelle version utilises-tu ?

      Plusieurs solutions :

      • Utiliser la fonction PIVOT si ton SGBD la propose
      • CONCATENER les différentes valeurs dans la même colonne et non dans plusieurs
      • Retourner un tableau droit à ton application qui se débrouille de croiser le tableau et de l'afficher comme tu le souhaites

      Une petite question. Dans ton exemple tu n'as qu'une seule durée, que voudrais-tu qu'il se passe si tu avais plusieurs durées avec des montants différents ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        19 octobre 2020 à 11:01:35

        Le soucis c'est que j'essai de n'utiliser que le SQL universel j'ai trouvé une solution avec des sous requête il faut modifier le script à la main après mais bon ce n'est pas grave merci pour la réponse
        • Partager sur Facebook
        • Partager sur Twitter

        S.PICARD

          19 octobre 2020 à 11:03:20

          La concaténation dans une même colonne n'est pas une option ?

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            19 octobre 2020 à 12:00:35

            en faite le résultat que je dois obtenir sont des données séparées à afficher dans un tableau

            -
            Edité par PicardSylvain 19 octobre 2020 à 12:02:07

            • Partager sur Facebook
            • Partager sur Twitter

            S.PICARD

              19 octobre 2020 à 13:31:54

              Oui, mais modifier la requête à chaque fois que tu veux changer de durée c'est un peu bourrin ...

              Je ne sais pas avec quel langage tu codes, mais tu peux trouver sur ce forum plusieurs sujets évoquant ton problème, plutôt en PHP, mais la logique reste la même quel que soit le langage ...

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                21 octobre 2020 à 11:42:34

                j'ai trouvé ma solution j'ai utilisé des sous-requêtes
                • Partager sur Facebook
                • Partager sur Twitter

                S.PICARD

                  21 octobre 2020 à 12:10:06

                  Ce n'est certainement pas la bonne solution ... chaque fois que tu vas modifier la liste des durées ou des tarifs il te faudra reprendre tes requêtes ... pas glop ...

                  C'est vraiment dommage de ne pas considérer les deux solutions proposées (avec PIVOT côté SGBD ou avec une boucle côté applicatif).

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    22 octobre 2020 à 6:45:34

                    Pourquoi ce n'est pas une bonne solution ? mon sql est universel je peux donc le transposé dans un autre SGBD je ne touche plus a mes requêtes mon CRUD fonctionne je n'arrive pas à comprendre pourquoi les sous requête n'est pas bonne une bonne solution

                    • Partager sur Facebook
                    • Partager sur Twitter

                    S.PICARD

                      22 octobre 2020 à 9:49:35

                      PicardSylvain a écrit:

                      je n'arrive pas à comprendre pourquoi les sous requête n'est pas bonne une bonne solution

                      Benzouye a écrit:

                      chaque fois que tu vas modifier la liste des durées ou des tarifs il te faudra reprendre tes requêtes ... pas glop ...

                      Voilà pourquoi ...

                      Après je n'ai peut-être pas compris ce que tu appelais "sous-requête" ... en exemple ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                        27 octobre 2020 à 4:56:59

                        SELECT col, col1, (SELECT col FROM table2 WHERE condition)

                              FROM table1

                              WHERE condition

                        • Partager sur Facebook
                        • Partager sur Twitter

                        S.PICARD

                          27 octobre 2020 à 14:16:10

                          No comment ...

                          -
                          Edité par Benzouye 27 octobre 2020 à 14:16:20

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                            27 octobre 2020 à 16:03:44

                            Si j'ai bien compris tu as :

                            - Une table avec plusieurs heure,

                            - Une table avec 3 catégorie

                            - une table avec des prix

                            Tu peux aussi utiliser des CASE WHEN ? 

                            SELECT duree, CASE WHEN cat1 = cat1 THEN Prix1 ELSE '' END, CASE WHEN cat2 = cat2 THEN Prix2 ELSE '' END ....

                            Après je pense que c'est comme actuellement si une catégorie viens à se rajouter il faudra le rajouter aussi dans la requête. (ce n'est pas dynamique)

                            -
                            Edité par DeveloSt 27 octobre 2020 à 16:25:03

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Site Internet : https://devst.go.yj.fr

                              28 octobre 2020 à 4:33:31

                              Oui j'ai bien vu que ma méthode à des limites je suis en formation développeur web et web mobile et le but était d'avoir le SQL le plus universel possible
                              • Partager sur Facebook
                              • Partager sur Twitter

                              S.PICARD

                              requete SQL recuperation

                              × 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