Partage
  • Partager sur Facebook
  • Partager sur Twitter

[mysql] Problème optimisation script mise à jour d'une base

+ problème fonction date

Sujet résolu
    16 septembre 2011 à 17:03:28

    Bonjour à tous,

    Je reprend actuellement le développement d'un site web, et je me retrouve confronté à un petit problème de conception, je vous explique :

    Je dois récupérer les informations de 2 tables de ma base de donnée qui sont comprises dans un intervalle de temps définie à l'avance, faire des calcules entre les différentes données, et à partir des résultats peupler une autre table.

    En gros j'ai :

    - 2 dates : date_debut_intervale et date_fin_intervale

    - 2 tables :

    table1 qui contient :
    - annee
    - mois
    - jour
    - heure
    - info1

    table2 qui contient :
    - annee
    - mois
    - jour
    - heure
    - info2

    Je voudrai donc :

    - Récupérer toutes les info1 et info2 qui sont compris entre date_debut_intervale et date_fin_intervale (grâces à annee, mois, jour et heure)

    - Faire des calculs entre info1 et info2

    - Peupler une nouvelle table à partir de ses résultats

    Le tout en le moins de requêtes possible car les tables sont très grosses.

    Je pensais donc faire un join entre table1 et table2, faire directement les calcules entre info1 et info2 dans la même requète, et stocker les résultats dans un tableau virtuel comme ceci :

    Tableau_virtuel :
    - date
    - résultat calcule1
    - résultat calcule2
    - résultat calcule3

    Après à partir de ce tableau virtuel j'aurai pu peupler ma table3.

    Le problème c'est que je n'arrive pas à faire cette 1ère requête, notamment car je ne trouve pas de fonction qui me convertie annee, mois, jour, heure en une date pour pouvoir faire un truc du genre :

    FONCTION_DATE_QUE_JE_TROUVE_PAS(annee, mois, jour, heure) AS date_table1

    En espérant avoir bien expliqué mon problème,

    Merci d'avances pour vos réponses (vous avez le temps je ne pourrai surement pas revenir sur le topic avant lundi ^^),

    Maugun
    • Partager sur Facebook
    • Partager sur Twitter
      16 septembre 2011 à 23:56:11

      Citation : maugun


      Le problème c'est que je n'arrive pas à faire cette 1ère requête, notamment car je ne trouve pas de fonction qui me convertie annee, mois, jour, heure en une date pour pouvoir faire un truc du genre :



      C'est bien ça le problème. Si les SGBD proposent un type DATE ou DATETIME c'est qu'il y a une raison, c'est pour stocker les dates sans avoir à créer une colonne pour chaque élément.
      Transforme tes tables comme ceci :

      table1 : date, info1
      table2 : date, info2

      (d'ailleurs elles sont étranges tes deux tables. Étant donné que le leur structure est identique, tu ne peux vraiment pas tout mettre dans la même table ?)

      Ensuite, ta requête est simplifiée.
      Si tu veux récupérer les éléments de date (année, mois, jour...) des fonctions le permettent aisément dans tous les langages.
      • Partager sur Facebook
      • Partager sur Twitter
        17 septembre 2011 à 16:35:05

        Je sais bien, le truc c'est que je ne fais que reprendre le développement d'un site, donc c'est pas moi qui ai choisi ce format pour les tables. :s

        Fin bon si il n'y a pas le choix je vais réadapter tout le site pour qu'il puisse fonctionner avec des tables de ce format. ^^

        Citation : Masterchaf


        (d'ailleurs elles sont étranges tes deux tables. Étant donné que le leur structure est identique, tu ne peux vraiment pas tout mettre dans la même table ?)



        Nan en fait elles ont pas exactement la même structure, c'est juste que je n'ai pas donné tout les champs de chaque table pour simplifier l'explication. ;)


        En tout cas merci pour ta réponse. ;)
        • Partager sur Facebook
        • Partager sur Twitter

        [mysql] Problème optimisation script mise à jour d'une base

        × 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