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

Requêtes MySQL Discussion :

Fusionner des enregistrements de la même table


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Fusionner des enregistrements de la même table
    Bonjour tout le monde et merci de m'accorder un peu de votre temps.

    Je viens d'arriver dans une société qui a un intranet existant et j'ai un petit souci sur une des tables de la base de donnée sous MySQL.
    Cette table fait 3Go !! Vous entendez bien 3Go ! C'est un peu énorme...
    Ce que je voudrais faire c'est faire une requête pour soulager tout ça en attendant de refaire leur intranet et donc la base de donnée.

    La table est structuré de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE `traffic` (
      `timer` date NOT NULL default '0000-00-00',
      `host` char(15) NOT NULL default '',
      `port` int(11) NOT NULL default '0',
      `protocol` int(11) NOT NULL default '0',
      `bytesin` bigint(11) NOT NULL default '0',
      `bytesout` bigint(11) NOT NULL default '0',
      PRIMARY KEY  (`timer`,`host`,`port`,`protocol`),
      KEY `hostsidx` (`host`)
    ) TYPE=MyISAM;
    C'est une table qui permet de géré comme vous pouvez le voir le traffic de bande passante d'un client.

    Un script perl existant et que je peux pas touché pour le moment rempli la table chaque jour.

    Donc pour un jour particulier, un host, sur un port avec un protocole particulier on a une valeur entrante et sortante.

    Ce que je voudrais faire c'est fusionner tout les enregistrements d'un host sur un port avec un protocle sur un mois par exemple.

    Mais comme je peux pas touché tout, je voudrais par exemple regroupé toutes les données d'un host au 2006-01-01 pour le mois de janvier, au 2006-02-01 pour le mois de février,etc. tout en faisant la somme des valeurs entrantes et sortantes.

    Comme ça au lieu d'avoir pour un host,prot,protocol 30 voire 31 lignes, j'en aurais plus qu'une seule. Et je réduit la taille de ma table considérablement.

    Je sais pas si je suis clair mais en fait je voudrais tout faire dans la même table si possible sans avoir à recréer une autre table!

    Enfin si c'est pas possible je laisse tomber. Mais là honnetement j'ai pas du tout de solution.

    Merci d'avance.

  2. #2
    Membre averti Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Points : 332
    Points
    332
    Par défaut
    slt...


    Avant de tous, je te conseil de faire des backups....

    3 Go, pas si gros que ca, .....

    moi, je ferais comme ca:

    nouvelle table temp: temp1, exactement pareil que traffic.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    insert into temp1  (timer,host,port,protocol,bytesin,bytesout)
    SELECT timer,host,port,protocol,sum(bytesin),sum(bytesout) 
    FROM traffic t
    group by extract(YEAR_MONTH FROM timer),host,port,protocol;

    sur la table temp, tu devras rester avec les valeurs que tu veus... du moin je crois...

    j´ai seulement fais quelques teste avec peut de lignes...

    sur temp1, tu devras rester avec les valeurs des bytesout et bytesin, en fontion de la date, mais aussi du host, du port et du protocol. Si tu veut pas en fontion de ces champs, tu devras juste changer le group by.

  3. #3
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Regarde du côté de GROUP BY (cf http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L1). Par contre c'est plus sûr de passer par une table temporaire avant de réinsérer les agrégats dans la table d'origine.
    Pensez au bouton

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ok ! Merci beaucoup ! V allez zieuter tout ça mais je me disais aussi que sans table temporaire ça allez être chaud.
    Je vous tiens au courant...
    Merci.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai tester la méthode de "jota5450" et elle marche super ! C'est sûr je bricole avec une table temporaire mais c'est déjà mieux que rien!
    Merci encore !
    J'ai fait mon backup, je vais lancer la requete. J'en ai pour quelques heures là

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

Discussions similaires

  1. enregistrer des données dans la même table
    Par syrine01 dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2013, 23h06
  2. Réponses: 3
    Dernier message: 28/11/2013, 15h17
  3. Copier un enregistrement dans une même table
    Par slammer dans le forum Langage SQL
    Réponses: 11
    Dernier message: 04/05/2010, 23h17
  4. Réponses: 5
    Dernier message: 25/09/2007, 17h06
  5. Rapatrier des enregistrements dans la bonne table
    Par el_quincho dans le forum Access
    Réponses: 1
    Dernier message: 13/03/2006, 14h41

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