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

MySQL Discussion :

Requêtes multiple en Update et insert into


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 45
    Par défaut Requêtes multiple en Update et insert into
    Bonjour à vous tous,
    J'ai un serveur qui récupère des informations de téléreleves, il s'agit de points 10 min sur 15 jours glissants. Ces mesures sont stockes dans des fichiers textes.
    J'ai donc crée un script en Php pour parcourir mes fichiers et les rajouter dans ma base de données.
    Aujourd'hui je parcours mon fichier si la date et l'heure de mon point existe alors je met a jour la donnée, sinon je la crée.
    Mon problème est le suivant:
    J’exécute une requête pour chaque valeur. Mon serveur lance beaucoup de script de ce genre en peu de temps, de ce fait il faut que j'optimise au maximum ce script.
    Ce que j'aimerai:
    Implémenter ma requête du genre sql_insert = " ......" pour tous mes insert et sql_update pour mes updates.
    Et une fois que j'ai parcourus tous mon fichier il me faut faire deux requetes.

    Je connais pas la synthaxe, ou les techniques les plus adaptées,
    Merci

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Importez votre fichier texte dans une table de la BDD puis traitez les données en une ou deux requêtes.

    Si vous nous donnez la structure des tables impliquées et de votre fichier texte, on pourra vous aider à construire ce qu'il faut.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 45
    Par défaut Reponse
    Bonjour et merci pour votre réponse,
    J'ai un dossier, dans lequel j'ai 32 dossiers dans lesquels j'ai 4 fichiers TEXTE 1,2,3,4.
    Les 4 fichiers ont la même strucuture,

    24/02/2015 12:00 777 704 628 637 551 538
    24/02/2015 13:00 574 501 490 516 596 511
    24/02/2015 14:00 498 481 426 450 405 290
    24/02/2015 15:00 289 346 365 408 337 445
    24/02/2015 16:00 481 481 413 232 123 86
    24/02/2015 17:00 86 51 29 13 7 1
    24/02/2015 18:00 0 0 0 0 0 0
    24/02/2015 19:00 0 0 0 0 0 0
    24/02/2015 20:00 0 0 0 0 0 0
    24/02/2015 21:00 0 0 0 0 0 0
    24/02/2015 22:00 0 0 0 0 0 0
    24/02/2015 23:00 0 0 0 0 0 0
    25/02/2015 00:00 0 0 0 0 0 0
    25/02/2015 01:00 0 0 0 0 0 0
    25/02/2015 02:00 0 0 0 0 0 0
    25/02/2015 03:00 0 0 0 0 0 0
    25/02/2015 04:00 0 0 0 0 0 0
    25/02/2015 05:00 0 0 0 0 0 0
    25/02/2015 06:00 0 0 0 0 0 0
    25/02/2015 07:00 0 2 1 31 76 158
    25/02/2015 08:00 174 235 420 627 623 562

    Par exemple la deuxième colonne de la 1 ligne correspond a la valeur pour 12:00 la troisième correspond a 12:10 et cela jusqu’à 12:50.

    Chacun des 32 dossiers ont la même structure: Un nom propre a chaque dossier.

    Ma table a la strcuture suivante:

    Date & heure Valeur Du fichier1 Valeur du fichier2 valeurdufichier3 Valeurdufichier4
    24/02/2015 12:00 777 2 3 4
    24/02/2015 12:10 574 2 3 4

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    il s'agit de points 10 min sur 15 jours glissants
    ...
    J'ai un dossier, dans lequel j'ai 32 dossiers dans lesquels j'ai 4 fichiers TEXTE 1,2,3,4.
    Pourquoi 30 dossiers et 4 fichiers ?

    Créez une table d'import :
    import(date_heure, zero, dix, vingt, trente, quarante, cinquante)

    Importez le fichier 1 dedans.

    Aujourd'hui je parcours mon fichier si la date et l'heure de mon point existe alors je met a jour la donnée, sinon je la crée.
    Voici la requête de mise à jour pour le fichier 1 et les mesures à l'heure juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE votre_table t1
    INNER JOIN import i ON i.date_heure = t1.date_heure
    SET t1.valeur_1 = i.zero
    C'est un truc de ce genre que vous cherchez ?

    Votre BDD est quand même mal modélisée. À quoi correspond chaque fichier ? Chaque répertoire ? N'avez-vous qu'une seule table pour recueillir tous les résultats ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 45
    Par défaut
    Bonsoir,
    Je suis obligé de faire de la sorte j'ai pas le choix!!
    Ma question est la suivante:
    C'est possible de faire insert into xxxxx (1,2,3,4) values (1,2,3,5) et ensuite (1,2,3,4) values (9,4,6,2) et ainsi de suite!
    Et en update ca donnerai
    Update xxxxxx set (1=3,2=4,3=3,4=5) where xxxx , set (1=4,2=3,3=9,4=2) where xxxx et ansi de suite

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par loic3484 Voir le message
    Ma question est la suivante:
    C'est possible de faire insert into xxxxx (1,2,3,4) values (1,2,3,5) et ensuite (1,2,3,4) values (9,4,6,2) et ainsi de suite!
    Et en update ca donnerai
    Update xxxxxx set (1=3,2=4,3=3,4=5) where xxxx , set (1=4,2=3,3=9,4=2) where xxxx et ansi de suite
    Euh... là je ne comprends pas trop l'idée mais j'avais bien compris le besoin de départ à partir de vos données exemple.

    Mais vous n'avez pas répondu à mes questions :
    Citation Envoyé par CinéPhil
    À quoi correspond chaque fichier ? Chaque répertoire ? N'avez-vous qu'une seule table pour recueillir tous les résultats ?
    Je demandais ça parce qu'en cherchant le type de requête qu'il vous faut, j'ai l'impression que ce ma solution ne sera pas forcément plus rapide que votre procédure actuelle. La jointure que j'ai donnée pourra être assez rapide en indexant la colonne date mais la requête ne fonctionne que pour les heures entières. Pour les dizaines de minutes intermédiaires, ça va être un peu plus compliqué et il ne sera plus possible de faire de jointure et d'utiliser les index, je pense.

    Donnez-nous la structure complète de votre table, résultat de SHOW CREATE TABLE nom_de_votre_table
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 883
    Par défaut
    Salut à tous.

    J'ai une solution possible, en fonction de ce que j'ai compris du problème.

    Création d'une base de données :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- ============
    -- Base `Essai`
    -- ============
     
    DROP DATABASE IF EXISTS `essai`;
     
    CREATE DATABASE `essai`
    	DEFAULT CHARACTER SET `utf8`
    	DEFAULT COLLATE       `utf8_general_ci`;
     
    USE `essai`;
     
    COMMIT;
     
    -- ================
    -- Table `entrepot`
    -- ================
     
    DROP TABLE IF EXISTS `entrepot`;
     
    CREATE TABLE `entrepot` (
      `Nom`        Char(12) NOT NULL,
      `Date`       date     NOT NULL,
      `Heure`      time     NOT NULL,
      `Rang`       SMALLINT NOT NULL,
      `Val`        int      NOT NULL,
      Primary Key (`Nom`,`Date`,`Heure`,`Rang`)
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- ===================
    -- Trigger `increment`
    -- ===================
     
    DROP TRIGGER IF EXISTS `increment`;
     
    DELIMITER $$
    CREATE TRIGGER `increment`
    BEFORE INSERT ON `entrepot`
    FOR EACH ROW BEGIN
        SET NEW.Rang=ifnull((select max(Rang)+1 from `entrepot` where Nom=NEW.Nom and Date=NEW.Date and Heure=NEW.Heure),1);
    END$$
    DELIMITER ;
     
    -- =====================
    -- Procédure `rangement`
    -- =====================
     
    DROP PROCEDURE IF EXISTS Remplir;
     
    DELIMITER $$
    CREATE PROCEDURE Remplir
    (
    	IN In_Nom      CHAR(12),
    	IN In_Date     CHAR(10),
    	IN In_Heure    time,
    	IN In_Val1     int,
    	IN In_Val2     int,
    	IN In_Val3     int,
    	IN In_Val4     int,
    	IN In_Val5     int,
    	IN In_Val6     int
    )
    DETERMINISTIC
    NO SQL
    BEGIN
      DECLARE Out_Date date;
      SET Out_Date = str_to_date(In_Date,'%d/%m/%Y');
     
      insert into `entrepot` (`Nom`,`Date`,`Heure`,`Val`) value (In_Nom,Out_Date, addtime(In_Heure, '00:00:00'), In_Val1);
      insert into `entrepot` (`Nom`,`Date`,`Heure`,`Val`) value (In_Nom,Out_Date, addtime(In_Heure, '00:10:00'), In_Val2);
      insert into `entrepot` (`Nom`,`Date`,`Heure`,`Val`) value (In_Nom,Out_Date, addtime(In_Heure, '00:20:00'), In_Val3);
      insert into `entrepot` (`Nom`,`Date`,`Heure`,`Val`) value (In_Nom,Out_Date, addtime(In_Heure, '00:30:00'), In_Val4);
      insert into `entrepot` (`Nom`,`Date`,`Heure`,`Val`) value (In_Nom,Out_Date, addtime(In_Heure, '00:40:00'), In_Val5);
      insert into `entrepot` (`Nom`,`Date`,`Heure`,`Val`) value (In_Nom,Out_Date, addtime(In_Heure, '00:50:00'), In_Val6);
    END$$
    DELIMITER ;
     
    -- =====================
    -- Creation vue `result`
    -- =====================
     
    create view `result` (Nom, Date, Heure, Val1, Val2, Val3, Val4) as
    select   nom, date, heure, val, 0,   0,   0   from entrepot where rang = 1 union
    select   nom, date, heure, 0,   val, 0,   0   from entrepot where rang = 2 union
    select   nom, date, heure, 0,   0,   val, 0   from entrepot where rang = 3 union
    select   nom, date, heure, 0,   0,   0,   val from entrepot where rang = 4
    ;
     
    COMMIT;
     
    SET AUTOCOMMIT = 1;
    Voici ce que l'on traite en php :

    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
    USE `essai`;
     
    -- =========================
    -- Insertion dans `entrepot`
    -- =========================
     
    CALL Remplir('Fic1','24/02/2015','12:00', 1,  2,  3,  4,  5,  6);
    CALL Remplir('Fic1','24/02/2015','13:00', 7,  8,  9, 10, 11, 12);
     
    CALL Remplir('Fic1','24/02/2015','12:00', 1,  2,  3,  4,  5,  6);
    CALL Remplir('Fic1','24/02/2015','13:00', 7,  8,  9, 10, 11, 12);
     
    CALL Remplir('Fic1','24/02/2015','12:00', 1,  2,  3,  4,  5,  6);
    CALL Remplir('Fic1','24/02/2015','13:00', 7,  8,  9, 10, 11, 12);
     
    CALL Remplir('Fic1','24/02/2015','12:00', 1,  2,  3,  4,  5,  6);
    CALL Remplir('Fic1','24/02/2015','13:00', 7,  8,  9, 10, 11, 12);
     
    COMMIT;
     
    -- ======
    -- Vidage
    -- ======
     
    select * from result;
    Le CALL sert à faire l'insertion dans la table entrepôt.
    la View result permet d'obtenir une table organisé selon votre souhait.
    Val1 : valeur provenant du fichier 1 & ainsi de suite.

    Le fichier 2, c'est qu'en on trouve une double clef.
    Le fichier 3, c'est qu'en on trouve une triple clef.
    Le fichier 4, c'est qu'en on trouve une quadruple clef.

    La clef est constitué du nom du dossier, de la date et de l'heure.
    L'heure augmente de 10 minutes.

    En espérant avoir répondu à ton attente.

    Cordialement.
    Artemus24.
    @+

Discussions similaires

  1. Réponses: 31
    Dernier message: 29/04/2014, 09h40
  2. Probleme avec UPDATE et INSERT INTO
    Par cmoimeme dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/05/2006, 22h12
  3. [Débutant(e)] Création d'une requête update ou insert
    Par boulete dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/04/2006, 18h24
  4. Réponses: 3
    Dernier message: 05/03/2006, 23h38
  5. [Requête] Problème INSERT INTO
    Par lerico dans le forum Requêtes et SQL.
    Réponses: 22
    Dernier message: 10/01/2006, 17h12

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