Partage
  • Partager sur Facebook
  • Partager sur Twitter

MySQL : SELECT Colonne auto-incrément

    29 juillet 2020 à 12:18:23

    Bonjour, 

    J'ai une Table avec beaucoup de colonne : 

    SELECT Colonne1, Colonne2, ..., Colonne30 FROM Table

    Est-ce qu'il y a un moyen plus rapide et plus simple sans écrire toutes les colonnes ?

    Je vous remercie d'avance pour vos réponses.  

    • Partager sur Facebook
    • Partager sur Twitter

    Mes Applications Android: Good-Luck(today), Mathx

      Staff 29 juillet 2020 à 12:58:44

      Bonjour,

      SELECT * FROM ma_table;

      Te permet de sélectionner toutes les colonnes. Mais il est souvent préférable pour limiter la taille du jeu de résultat de préciser dans le SELECT seulement les colonnes nécessaires à l'usage ...

      Après, quand tu dis "beaucoup de colonnes" de combien de colonnes parles-tu ?

      N'as-tu pas un problème de modélisation ? Quel type de colonne et d'information stockes-tu ?

      Pourquoi dans ton titre parles-tu d'auto incrément ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        29 juillet 2020 à 13:27:14

        Je ne peux pas utiliser * car je ne souhaite pas sélectionner toutes les colonnes 

        Ma table contiens 28 colonnes au total

        Je stocke des décimal(4,1) dans 20 colonnes et les autres sont en varchar 

        Je parle d'auto-incrémentation car mes colonnes s'appelle par exemple noms1, noms2, noms3 ... et je recherche à incrémenter le chiffre à la fin automatiquement

        La raison est que j'ai plusieurs tableaux, graphiques à remplir en fonction de 2 colonnes par exemple couleur et taille donc a chaque fois je relance un SELECT 

        • Partager sur Facebook
        • Partager sur Twitter

        Mes Applications Android: Good-Luck(today), Mathx

          Staff 29 juillet 2020 à 13:33:39

          DeveloSt a écrit:

          Je parle d'auto-incrémentation car mes colonnes s'appelle par exemple noms1, noms2, noms3

          C'est pour cela que je parlais de problème de modélisation ... Quand tu commences à numéroter tes colonnes c'est que tu es passé à côté d'une relation 1,n ou n,n ...

          Je te conseille de revoir ton modèle plutôt que de chercher à résoudre ton problème en l'état ...

          Peux-tu nous en dire plus sur ces colonnes nom ? De quoi parle-t-on ici ? De quel type d'enregistrements ?

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            29 juillet 2020 à 13:55:42

            Je vais prendre un exemple entier : 

            Le temps passé dans une sale de sport : 

            j'ai comme colonne :

            - lieux

            - clients

            - date

            - type d'exercice

            - heure1 

            - heure2

            -... 

            Le temps passé en minute est découpé en chaque tranche horaires. 

            Au départ j'avais une colonne heure(uniquement), mais j'ai préféré la solutions ci-dessus. 

            Car sinon il me faut 24 ligne (chaque heures) multiplié par le lieux, le type d'exercice...

            -
            Edité par DeveloSt 29 juillet 2020 à 14:22:57

            • Partager sur Facebook
            • Partager sur Twitter

            Mes Applications Android: Good-Luck(today), Mathx

              Staff 29 juillet 2020 à 15:34:31

              DeveloSt a écrit:

              sinon il me faut 24 ligne (chaque heures) multiplié par le lieux, le type d'exercice

              Bah ... c'est un peu le principe des bases de données relationnelles ... Ce n'est pas un mal, mais une structure spécifiquement adaptée ...

              Si tu veux vraiment utiliser une BDD relationnelle il faut vraiment faire un MCD (modèle entité / relation avec cardinalités), et là tu vas obtenir un vrai modèle logique pertinent, performant, maintenable et évolutif ...

              A disposition pour réfléchir avec toi à ton MCD si tu le souhaites ;)

              Après si les contraintes relationnelles te gonflent, je te conseille fortement de passer sur un fonctionnement NoSQL (MongoDB par exemple) ... et là, plus de prise de tête avec tes colonnes ...

              Enfin, pour revenir sur ta question de départ :

              DeveloSt a écrit:

              Je ne peux pas utiliser * car je ne souhaite pas sélectionner toutes les colonnes

              Rien ne t'empêche de faire un SELECT * et de n'exploiter que les colonnes qui t'intéressent ... 24 sur 28 ce n'est pas une gros gâchis ...

              Sinon, il va te falloir construire ta requête SQL côté programme (avec quel langage codes-tu ?) dans une boucle ...

              -
              Edité par Benzouye 29 juillet 2020 à 15:35:37

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                29 juillet 2020 à 16:21:24

                Benzouye a écrit:

                - Bah ... c'est un peu le principe des bases de données relationnelles ... Ce n'est pas un mal, mais une structure spécifiquement adaptée ...

                En faisant comme cela j'ai l'impression de stocker moins de données qui sont "Null" et donc d'avoir une BDD moins lourde. 

                J'envois demain un exemple de la structure de ma BDD

                Benzouye a écrit:

                Rien ne t'empêche de faire un SELECT * et de n'exploiter que les colonnes qui t'intéressent ... 24 sur 28 ce n'est pas une gros gâchis ...


                Le problème c'est que si je fait un SELECT * le tableau dans l'interface va m'afficher toutes les données de plus dans mes SELECT j'ai souvent des données qui proviennent d'autres tables. 

                Benzouye a écrit:

                Sinon, il va te falloir construire ta requête SQL côté programme (avec quel langage codes-tu ?) dans une boucle ...

                J'ai commencé a faire de cette manière, mais cela m'appelle 24 requêtes SQL et j'ai peur que le serveur ne supporte pas. 

                Justement je suis entrain de supprimer mes boucles for 

                Je code en VB avec le framework ASP j'ai également un Timer et un updatepanel pour réactualiser et mettre à jours les données à une certaine fréquence. 



                -
                Edité par DeveloSt 29 juillet 2020 à 16:31:49

                • Partager sur Facebook
                • Partager sur Twitter

                Mes Applications Android: Good-Luck(today), Mathx

                  Staff 29 juillet 2020 à 16:39:53

                  DeveloSt a écrit:

                  En faisant comme cela j'ai l'impression de stocker moins de données qui sont "Null" et donc d'avoir une BDD moins lourde

                  Pourtant c'est bien le contraire ... En normalisant ton modèle, tu ne crées que les enregistrements nécessaires ...

                  De plus le principe de tranche horaire ne me paraît pas pertinent dans ton modèle puisqu'il se détermine aisément à partir de l'heure saisie ...

                  Sans en savoir plus sur ton projet, et avec les éléments décrit plus haut, je ferai un modèle plutôt comme ceci :

                  A toi ensuite d'adapter ton IHM pour qu'elle facilite la saisie des entraînements ...

                  -
                  Edité par Benzouye 29 juillet 2020 à 16:40:52

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    29 juillet 2020 à 17:00:38

                    Benzouye a écrit:

                    DeveloSt a écrit:

                    En faisant comme cela j'ai l'impression de stocker moins de données qui sont "Null" et donc d'avoir une BDD moins lourde

                    Pourtant c'est bien le contraire ... En normalisant ton modèle, tu ne crées que les enregistrements nécessaires ...

                    J'ai compris Si tu garde une colonne heure globale :  tu fait un INSERT INTO seulement si il y a une valeurs à cette heure et donc cela t'évite d'avoir une valeur à chaque heure... J'étais partie du fait que j'étais obligé d'avoir une valeur chaque heure même si elle est null :! 

                    Mais peut-être que le fait de me débarrasser des valeur null m'aurais compliqué la tâche dans la création des graphiques en arrière-plan du coté de VB

                    Merci pour ta réponse, 

                    Ma base de données ressemble exactement à cela :) 

                    J'ai juste une table en plus qui se nome horaire qui me permet de regrouper les données chaque heures 

                    Par exemple : le client 1 de 9H-10H à passé 25 min sur le type_d'exercice1 et 15 min sur le type_d'exercice2 

                     Edit : Peut être en passant par des requetes parametrées :

                    https://stackoverflow.com/questions/25866634/how-get-the-auto-increment-column-name-from-the-table

                    De toute façons j'étais partis pour transformer toutes mes requetes :)



                    -
                    Edité par DeveloSt 29 juillet 2020 à 17:20:29

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Mes Applications Android: Good-Luck(today), Mathx

                      Staff 29 juillet 2020 à 17:34:51

                      DeveloSt a écrit:

                      Ma base de données ressemble exactement à cela :)

                      Euh en fait pas du tout, car même si les tables d'entité sont là, le noeud du problème est justement dans cette table horaire ...

                      DeveloSt a écrit:

                      J'ai juste une table en plus qui se nome horaire qui me permet de regrouper les données chaque heures 

                      Par exemple : le client 1 de 9H-10H à passé 25 min sur le type_d'exercice1 et 15 min sur le type_d'exercice2

                      Alors le modèle serait :

                      Là tu es normalisé, évolutif, maintenable et performant ...

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                        29 juillet 2020 à 18:27:35

                        Il y a pas mal de chose qui change oO

                        Merci beaucoup pour le modèle, c'est vrai que c'est beaucoup mieux :) 

                        Je regarderai plus en détail demain. 

                        EDIT : 

                        Pour l'instant ma base de donnée se présente comme cela : 

                        Les tables client, type exercice et client sont uniquement des stockage de données. 

                        La table exercice regroupe toutes les saisies des clients. 

                        La Table Horaire d'organiser/de regrouper toutes les données

                        La Table séance de suivre les données de chaque séance

                        Le modèle n'est surement pas complet, je le fait évoluer en fonction des besoins qui n'arrête pas de changer :(, 

                        Pour l'instant l'application fonctionne bien, même si ma BDD n'est pas optimal

                        -
                        Edité par DeveloSt 30 juillet 2020 à 15:49:31

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Mes Applications Android: Good-Luck(today), Mathx

                          Staff 30 juillet 2020 à 16:51:06

                          Le modèle posté n'est ni correct, tu mélanges MCD et MLD (les relations ne sont pas des tables), ni opérationnel, les colonnes clés sont mélangées et incohérentes ... regarde mieux le MCD que je t'ai proposé, et le MLD est textuel au-dessous.

                          J'ai du mal à croire que ton application fonctionne avec ce modèle exactement ...

                          Je maintien que tu as un problème de conception avec cette table horaire.

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                            30 juillet 2020 à 17:48:35

                            Pour réaliser mes graphiques ou mes tableaux en VB, j'ai besoin d'avoir une table avec une données pour chaque heure (même si elle sont vide).

                            C'est beaucoup plus dure de remplir chaque colonne d'un gridView (heure/heure) si tu n'a pas la colonne dans ta table SQL : 

                             <asp:TemplateField HeaderText="21H-22H">
                                                            <ItemTemplate>
                                                                <asp:TextBox ID="h21" runat="server" Text='<%#Eval("h21") %>' Width="90%" AutoPostBack="true" OnTextChanged="H21_Click" OnClick="$find('TimerDT')._stopTimer();" OnBlur="$find('TimerDT')._startTimer();"></asp:TextBox>
                                                            </ItemTemplate>
                                                        </asp:TemplateField>
                            
                                                        <asp:TemplateField HeaderText="22H-23H">
                                                            <ItemTemplate>
                                                                <asp:TextBox ID="h22" runat="server" Text='<%#Eval("h22") %>' Width="90%" AutoPostBack="true" OnTextChanged="H22_Click" OnClick="$find('TimerDT')._stopTimer();" OnBlur="$find('TimerDT')._startTimer();"></asp:TextBox>
                                                            </ItemTemplate>
                                                        </asp:TemplateField>



                            Ma table horaire fonctionne de la manière suivante : 

                            J'ai un timer qui me fait un UPDATE toutes les minute dans la colonne heure synchronisée avec l'heure du système. 

                            Puis je fait un SELECT de la durée (dans les colonnes heures) que je veux sommer ou tout simplement pour avoir une courbe de temps en fonction du besoin (client, type d'exercice, seance...) sur une date ou même une plage horaire. 

                            Cette partie fonctionne très bien en l'état :) 

                            Je cherche juste à gagner en performance sur mes requête SQL (Eviter plusieurs SELECT, Requête paramétré, utilisation d'IGNOR ou try catch, redimensionnement des type dans ma BDD, limiter les appelle au strict minimum...) 

                            Je ne sais pas si j'aurai le temps de casser toutes ma structure (qui fonctionne) pour en créer une nouvelle...

                            -
                            Edité par DeveloSt 30 juillet 2020 à 17:57:52

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Mes Applications Android: Good-Luck(today), Mathx

                              Staff 31 juillet 2020 à 8:55:04

                              DeveloSt a écrit:

                              Cette partie fonctionne très bien en l'état :)

                              Pas avec le modèle présenté juste avant ... Soit ce n'est pas le modèle vraiment utilisé, soit il y a un truc que je ne comprends pas ...

                              DeveloSt a écrit:

                              j'ai besoin d'avoir une table avec une données pour chaque heure (même si elle sont vide)

                              Avec mon modèle, la table horaire contient tous les horaires possibles d'une journée.

                              La requête SELECT peut partir de cette table pour "forcer" l'affichage de tous les horaires même si aucune séance saisie dessus ...

                              Exemple :

                              SELECT
                              	H.id_horaire,
                              	H.heure_debut,
                              	S.id_seance,
                              	S.date_seance,
                              	L.id_lieu,
                              	L.nom,
                              	C.id_client,
                              	C.prenom,
                              	C.nom,
                              	E.id_exercice,
                              	E.libelle,
                              	SE.duree
                              FROM
                              	horaire H
                              		LEFT JOIN seance S
                              			ON H.id_horaire = S.ih_horaire
                              			AND S.date_seance = 'date souhaitée' -- condition à faire varier au besoin
                              			AND S.id_client = 'client souhaité' -- condition à faire varier au besoin
                              			AND S.id_lieu = 'lieu souhaité' -- condition à faire varier au besoin
                              		LEFT JOIN lieu L
                              			ON S.id_lieu = L.id_lieu
                              		LEFT JOIN client C
                              			ON S.id_client = C.id_client
                              		LEFT JOIN composition SE
                              			ON S.id_seance = SE.id_seance
                              		LEFT JOIN exercice E
                              			ON SE.id_exercice = E.id_exercice
                              ORDER BY H.heure_debut

                              L'utilisation des jointures externes permet d'afficher tous les horaires, même ceux sans séance ...

                              DeveloSt a écrit:

                              Je ne sais pas si j'aurai le temps de casser toutes ma structure (qui fonctionne) pour en créer une nouvelle

                              ça, c'est en effet un autre problème :) c'est à toi de voir ...

                              -
                              Edité par Benzouye 31 juillet 2020 à 8:56:48

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                31 juillet 2020 à 10:06:08

                                Benzouye a écrit:

                                DeveloSt a écrit:

                                Cette partie fonctionne très bien en l'état :)

                                Pas avec le modèle présenté juste avant ... Soit ce n'est pas le modèle vraiment utilisé, soit il y a un truc que je ne comprends pas ...

                                C'est peut être le fait que je passe beaucoup par du VB,

                                SELECT dont je sauvegarde leurs valeurs directement dans des "variables"  tableau en VB puis des UPDATE...

                                Voila un exemple de requête UPDATE 

                                Dim cmd As New MySqlCommand("UPDATE horaire SET horaire.h" + heureServeur + " = '" + (-If(String.IsNullOrEmpty(DureeEventH(client, seance)), 0, CInt(DureeEventH(client, seance))) + If(String.IsNullOrEmpty(DureeTotEvent(client, seance)), 0, CInt(DureeTotEvent(client, seance)))).ToString() + "' WHERE horaire.type_donnee = 'Temps' AND date = '" + DateJ.Text + "'", con)
                                                                   



                                Benzouye a écrit:

                                Avec mon modèle, la table horaire contient tous les horaires possibles d'une journée. 

                                Dans ta Table horaire si il n'y a aucune données  par exemples la ligne id_horaire : 1 et hdebut : 8H50 n'existe pas 

                                Comment tu retrouve heure 1 si elle n'existe pas ? 

                                Puis au niveau de l'interface si je remplis ma GridView au lieu d'avoir un tableau avec les colonne 

                                H1 | H2 | H3 ....

                                J'aurais une colonne horaire contenant 

                                H1

                                H2

                                H3

                                .... 

                                -
                                Edité par DeveloSt 31 juillet 2020 à 11:35:45

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Mes Applications Android: Good-Luck(today), Mathx

                                  Staff 31 juillet 2020 à 13:36:40

                                  Dans ma poroposition, la table horaire contient tous les créneaux horaires possibles, exemple : 8h 8h30 9h 9h30 10h 10h30 etc.

                                  Il faut bien sûr l'alimenter en tout premier et la tenir à jour si les créneaux changent ...

                                  Quand un client déclare une séance tu enregistres une séance avec l'id du client, l'id du lieu et l'id du créneau horaire concerné.

                                  Mais avec ton dernier message, j'ai l'impression que l'horaire de début et la durée des séances est complètement variable ... c'est ça ?

                                  Si je devais traiter ce sujet, j'imaginerais le système suivant :

                                  • Lorsque le client arrive dans une salle de sport (lieu) (avec un système de badge par exemple), cela crée un enregistrement dans la table seance, avec la date et l'heure de début, l'id du lieu et l'id du client.
                                  • Lorsque le client commence un exercice, (avec un système de badge par exemple) cela crée un enregistrement dans la table composition, avec l'heure de début et l'id de la seance démarrée.
                                  • Lorsque le client fini un exercice, (avec un système de badge par exemple) cela met à jour la table composition avec l'heure de fin de l'exercice.
                                  • Lorsque le client quitte la salle, (avec un système de badge par exemple) cela met à jour la table seance avec l'heure de fin de la séance.

                                  Du coup la table horaire sort complètement du modèle :

                                  Tout se passe côté SQL pour récupérer la durée des exercices et des séances avec des colonnes de type DATE, TIME ou DATETIME ...

                                  Dans ton cas, je ne comprend pas ce que représente H1, H2, H3, etc. d'autant que tu construis ta requête avec une variable heureServeur que doit je suppose être la récupération de l'heure courante ...

                                  Peux-tu me montrer un graphique d'exemple où tu exploites ces données ?

                                  Après pour représenter des données temporelles (avec l'échelle du temps), il existe des bibliothèques assez bien faite pour cela, par exemple avec .NET, tu as la classe Timeline ...

                                  J'ai l'impression que tu as construit ta base en fonction de tes connaissances pour construire tes IHM en VB, du coup tu as biaisé toute ta réflexion ...

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                    31 juillet 2020 à 14:24:40

                                    Benzouye a écrit:

                                    Il faut bien sûr l'alimenter en tout premier et la tenir à jour si les créneaux changent ...

                                    Oui mais dans se cas en le stockage dans la bdd reviens au même si mes heures sont en ligne ou en colonne. 

                                    D'un point de vue développement cela m'est plus facile avec des colonne. 

                                    Aussi je doit pouvoir séparer un evenement: exemple 9H50-10H15 il y a 10 minute entre 9H-10H et 15min entre 10H-11H,

                                    Benzouye a écrit:

                                    Mais avec ton dernier message, j'ai l'impression que l'horaire de début et la durée des séances est complètement variable ... c'est ça ? 

                                    C'est exactement ça ! Il y a juste 2-3 petites particularité en plus :) 

                                    Le clients peut declarer des temps de récupération qui varie pendant la seance. 

                                    Changer d'exercice

                                    ...

                                    Benzouye a écrit:

                                    Tout se passe côté SQL pour récupérer la durée des exercices et des séances avec des colonnes de type DATE, TIME ou DATETIME .

                                    Ici la durée est calculé en temps réel : heure serveur (actuelle) - heure debut -recuperation en vb puis je fait un update de ma table horaire a la bonne heure. 

                                    Benzouye a écrit:

                                    Dans ton cas, je ne comprend pas ce que représente H1, H2, H3, etc. 

                                    H1 c'est 1H-2H elle stockes différentes informations selon le type d'exercice. 

                                    Par exemple j'ai une ligne duree entraînement

                                    Une deuxième ligne nombre de tours effectué

                                    Et une troisième ligne objectif. 

                                    Benzouye a écrit:

                                    Après pour représenter des données temporelles (avec l'échelle du temps), il existe des bibliothèques assez bien faite pour cela, par exemple avec .NET, tu as la classe Timeline ...

                                    Je ne connaissais pas la classe TimeLine, en parcourant Stackoverflow je suis tombé plusieurs fois sur la bibliothèque SignalR. Mais qui me semblait un peut trop avancé pour ce que je voulais en faire (de plus j'ai moins de connaissances en javaScript)

                                    Donc je suis partie sur un simple Timer qui actualise toutes les minutes avec un updatePanel

                                    Benzouye a écrit:

                                    J'ai l'impression que tu as construit ta base en fonction de tes connaissances pour construire tes IHM en VB, du coup tu as biaisé toute ta réflexion ...

                                    Oui tu as totalement raison la base je l'ai crée a partir de mes connaissance en programmation, du cahier des charges qui a bien evolué aussi (au depart j'avais pas du temps réel a mettre dans mes colonne horaires), des contraintes imposées pas l'Ihm, des differentes fonctionnalités que je n'ai pas forcement besoin de stocker...

                                    Je regarderais pour envoyer un graphique ce weekend



                                    -
                                    Edité par DeveloSt 4 août 2020 à 14:14:40

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Mes Applications Android: Good-Luck(today), Mathx

                                      2 août 2020 à 15:03:32

                                      Je poste rapidement une esquisse rapide que j'avais fait de l'interface, 

                                      J'ai encore d'autres onglet qui affiche des graphiques 

                                      EDIT : Peut-être que je me suis un peu trop appuyé sur l'interface pour créer ma Base de Données. 

                                      Par exemple les informations sur la performance je ne suis pas obligé de le stocker dans ma BDD : suffit de faire un calcul en VB à partir des valeurs récupéré

                                      Je viens d'apprendre que le numéros de Séance peut ne pas être Unique (On peut avoir plusieurs lignes avec le même numéros de Séance pour un même client)  :'(

                                      Je vais devoir encore bricoler quelques chose :(

                                      C'est horrible quand le cahier des charges ne fait qu'évoluer/modifier

                                      -
                                      Edité par DeveloSt 4 août 2020 à 12:46:51

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Mes Applications Android: Good-Luck(today), Mathx

                                      MySQL : SELECT Colonne auto-incrément

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      • Editeur
                                      • Markdown