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

SQLite Discussion :

Création d'un table se basant sur deux autres tables


Sujet :

SQLite

  1. #1
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut Création d'un table se basant sur deux autres tables
    Bonjour à tous,
    N'étant pas spécialiste en SQL je suis face à un petit problème, votre science pourrait grandement m'aider ;-)
    Je développe une app mobile utilisant (cordova, html, css, javascript, jQuery, JQM, avec DB SQLITE).
    Voici mon problème : j'ai deux tables T_Apports et T_Depenses.
    T_Apports est constituée entre autre des deux champs: DateCourte (contient une date au format YYYY-MM-DD) et CAL (contient un float). Peut contenir plusieurs enregistrement pour la même date.
    T_Depenses est constituée entre autre des deux champs: DateCourte (contient une date au format YYYY-MM-DD) et DEP (contient un float). Peut contenir plusieurs enregistrement pour la même date.
    A l'ouverture d'une page je voudrait dynamiquement Droper puis recréer une table qui contiendrait 4 champs: (une seule ligne par date)
    1) DateCourte (commune au deux table)
    2) CAL (Somme CAL de la première table sur base de la date)
    3) DEP (Somme de Dep de la deuxième table sur base de la date )
    4) Tot ( CAL - DEP ) pour cette date.

    Quelqu'un pourrait-il me mettre sur la voie?
    D'avance merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Pourquoi créer une table alors qu'une vue ferait tout aussi bien le travail ?

    Il y a plusieurs moyens d'obtenir le résultat que tu attends. Parmi ceux-ci, je te propose la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  date_courte
        ,   SUM(cal)    AS  cal
        ,   SUM(dep)    AS  dep
    FROM    (   SELECT  date_courte
                    ,   cal
                    ,   0   AS dep
                FROM    t_apports
            UNION ALL
                SELECT  date_courte
                    ,   0   AS cal
                    ,   dep
                FROM    t_depenses
            )   tmp
    GROUP BY date_courte
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Merci al1_24, j'essaie ça dans la foulée et je reviens faire état du résultat.

    Afin de mourir moins bête, pourrais-tu m'expliquer le 0 dans le deuxième et troisième SELECT ?

    Haa ok, je crois que j'ai pigé ! on met à zéro puisque inexistant dans cette table ! !

  4. #4
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    al1_24 j'applique selon ton exemple, par contre je coince sur la récupération du résultat.
    Du fait qu'il ne s'agit plus d'une table pour laquelle j'aurais fait
    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
     
    sqlActionTableActBurned =
                            "SELECT  DateCourte, SUM(Calories) AS cal, SUM(KCalAct) AS dep " +
                            "FROM (SELECT DateCourte, cal, 0 AS dep FROM T_Repas " +
                            "UNION ALL " +
                            "SELECT  DateCourte, 0 AS cal, dep" +
                            "FROM T_BurnKCal ) tmp " +
                            "GROUP BY DateCourte ";
    var ConsoleMess = "Lecture réussie";
     
    tx.executeSql(sqlActionTableActBurned, undefined, function (tx, result)
                {
                    if (result.rows.length > 0)                                     /* Si existant */
                    {
                        var len = result.rows.length;
                        for (var i = 0; i < len; i++)
                        {
                            var row = result.rows.item(i);
     
                       /* Et je récupère ici les différents rows de la table */
     
                        }
                    } else
                    {
     
                    }
                    if (ConsoleMess !== "")
                    {
                        console.log(ConsoleMess);
                    }
                }, erreur_bd);
    j'ai un peu de mal à voir comment récupérer les données , pourrais-tu me mettre sur la voie ?
    Le tmp est également un peu obscur pour moi

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Je peux te répondre pour tmp : il s'agit d'un nom d'alias pour la table dérivée (sous-requête). Je ne connais pas suffisamment SQLite pour savoir s'il est indispensable (cela dépend des SGBD) donc, par sécurité...

    Quant à t'aider sur ton programme, c'est en dehors de mes compétences ; je ne pratique pas le langage que tu utilises.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    Quelque chose coince dans la requête.
    j'ai une erreur : Erreur BD: could not prepare statement (1 no such column: DateCourte) alors que je suis sûr d'avoir ce champ dans chacune des tables.

  7. #7
    Membre habitué Avatar de Goltar
    Homme Profil pro
    Eternel Etudiant Curieux
    Inscrit en
    Mars 2011
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Eternel Etudiant Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 216
    Points : 137
    Points
    137
    Par défaut
    OK problème résolu ! Merci al1_24
    La solution que j'ai appliqué :

    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
     
    /* Ma requète */
    sqlActionTableActBurned =
                            "SELECT DateCourte, SUM(Calories) AS cal, SUM(KCalAct) AS dep " +
                            "FROM (SELECT DateCourte, Calories, 0 AS KCalAct FROM T_Repas " +
                            "UNION ALL " +
                            "SELECT  DateCourte, 0 AS Calories, KCalAct " +
                            "FROM T_BurnKCal ) " +
                            "GROUP BY DateCourte ";
    /* Mon affichage */
    db.transaction(function (tx)
        {
    tx.executeSql(sqlActionTableActBurned, undefined, function (tx, result)
                {
                    if (result.rows.length > 0)                                     /* Si existant */
                    {
                        var len = result.rows.length;
                        for (var i = 0; i < len; i++)
                        {
                            var row = result.rows.item(i);
     
                            var DC = row.DateCourte;
                            var cal = row.cal;
                            var dep = row.dep;
     
                            var ligne = DC + " | " + cal + " | " + dep + "<br/>" ;
                            $("#ListeCalJour").append(ligne);
                        }
                    } else
                    {
     
                    }
                    if (ConsoleMess !== "")
                    {
                        console.log(ConsoleMess);
                    }
                }, erreur_bd);
    });
    Cela fonctionne nickel !
    Me reste plus qu'a peaufiner mon affichage !

    Encore Merci al1_24

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

Discussions similaires

  1. [9.6] Contrainte sur une table vers deux autres tables
    Par Narann dans le forum Débuter
    Réponses: 5
    Dernier message: 19/05/2018, 19h35
  2. Réponses: 5
    Dernier message: 25/01/2013, 12h18
  3. [XL-2007] RechercheV en se basant sur deux valeurs
    Par jawed dans le forum Excel
    Réponses: 2
    Dernier message: 26/10/2011, 23h31
  4. Réponses: 3
    Dernier message: 06/09/2008, 06h51
  5. créer TRIGGER sur 1 table avec liaison sur 2 autre table
    Par shaka84 dans le forum Développement
    Réponses: 2
    Dernier message: 11/04/2006, 11h10

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