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 :

Insertion en auto-référence avec condition where


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut Insertion en auto-référence avec condition where
    Bonjour à tous,


    Je travaille actuellement sur une application concernant une société exploitant un réseau de bus, j'ai donc une table ligne selon cette structure :
    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
    --
    -- Structure de la table `ligne`
    --
     
    CREATE TABLE IF NOT EXISTS `ligne` (
      `ID_LIGNE` int(11) NOT NULL AUTO_INCREMENT,
      `ID_DATE` int(11) NOT NULL,
      `NUMERO_LIGNE` varchar(100) NOT NULL,
      `NOM_LIGNE` varchar(100) NOT NULL,
      `DISTANCE_FIXE` int(11) DEFAULT NULL,
      `DISTANCE_SAD_THEORIQUE` int(11) DEFAULT '0',
      `TX_SAD` float DEFAULT NULL,
      `DISTANCE_SS_TRAITEE` int(11) DEFAULT '0',
      `NOMBRE_COURSES_TOTALE` int(11) DEFAULT NULL,
      PRIMARY KEY (`ID_LIGNE`),
      UNIQUE KEY `AK_INFOS_LIGNE` (`ID_DATE`,`NUMERO_LIGNE`)
    ) ENGINE=InnoDB  DEF
    Chaque ligne existe donc à un mois donné (le couple MOIS-ANNEE correspondant à un et seul ID_DATE), ce qui pose le problème suivant : le client doit chaque mois recréer les lignes de bus une par une à travers les formulaires prévus à cet effet.

    J'ai donc pensé à la solution suivante pour simplifier le processus : le client choisit un mois et une année, à partir de l'ID_DATE récupéré le système récupère les informations concernant les lignes du mois précédent (ID_DATE - 1) et insére ces données pour le mois choisit.

    Exemple : le client choisit de créer les lignes du mois de Septembre 2011, le système récupère les informations des lignes de Août 2011 (le mois précédent) et insère ces donnés pour Septembre 2011.

    Je dois donc effectuer une insertion en auto-référence mais je ne comprends pas comment intégrer les where correctement (un pour le SELECT et un pour le INSERT).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT NUMERO_LIGNE, NOM_LIGNE, DISTANCE_FIXE, DISTANCE_SAD_THEORIQUE
           FROM   LIGNE
           WHERE  ID_DATE = ID_DATE_PRECEDENT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO LIGNE (NUMERO_LIGNE, NOM_LIGNE, DISTANCE_FIXE, DISTANCE_SAD_THEORIQUE) 
           //le résultat du SELECT ci-dessus
           FROM   LIGNE
           WHERE  ID_DATE = ID_DATE_SELECTIONNE
    Le manuel MySQL me laisse penser qu'il faut renommer la table ligne mais je n'ai pas plus d'informations concernant l'utilisation des where et tout ce que j'ai essayé pour l'instant a échoué, je m'en remet donc à vous en espérant avoir été assez explicite !

    Merci d'avance !

  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
    Il faut créer une table temporaire avec le SELECT puis utiliser cette table temporaire dans l'INSERT.
    Les deux requêtes doivent être lancées à la suite dans la même connexion.

    Mais tu as quand même un problème de modélisation car tu répètes les mêmes informations chaque mois dans de nouvelles lignes, ce qui crée de la redondance de données.
    Si ce n'est pas trop tard, je te conseille vivement de revoir ton modèle de données !
    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 chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Ok merci de la réponse rapide, je pense que j'ai réussi à faire tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TEMPORARY TABLE ligne_selected SELECT ID_DATE, NUMERO_LIGNE, NOM_LIGNE, DISTANCE_FIXE, DISTANCE_SAD_THEORIQUE FROM LIGNE WHERE ID_DATE = 1
    ORDER BY ID_LIGNE;
     
    INSERT INTO LIGNE (ID_DATE, NUMERO_LIGNE, NOM_LIGNE, DISTANCE_FIXE, DISTANCE_SAD_THEORIQUE) 
           SELECT ID_DATE+1, NUMERO_LIGNE, NOM_LIGNE, DISTANCE_FIXE, DISTANCE_SAD_THEORIQUE
           FROM   ligne_selected;
    Concernant la modélisation, je sais que ce n'est pas très rigoureux mais cela correspond à l'utilisation que le client veut en faire et compte tenu de l'avancement du développement je ne peux pas tellement changer mon modèle.

    En tout cas merci bien pour le coup de pouce, ça m'a bien aidé et motivé !

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

Discussions similaires

  1. Insertion base de données avec condition
    Par simsim1 dans le forum Access
    Réponses: 22
    Dernier message: 20/06/2011, 09h38
  2. [MySQL] Pb INSERT TO avec condition WHERE
    Par naroco dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/02/2010, 10h48
  3. [ZF 1.9] [Débutant] SELECT avec condition WHERE + précisions
    Par Ibuprofène dans le forum Zend_Db
    Réponses: 5
    Dernier message: 02/02/2010, 17h25
  4. insert into depuis formulaire avec condition
    Par vinc54 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/05/2008, 10h37
  5. Réponses: 3
    Dernier message: 16/02/2006, 16h58

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