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

PHP & Base de données Discussion :

Automatiser une saisie multiple [SQL-Server]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2020
    Messages : 26
    Par défaut Automatiser une saisie multiple
    Bonjour à toutes et à tous,

    Disposant d'une base de données (SQL Server) à laquelle j'accède via du PHP (CodeIgniter), est-il possible lors de la saisie d'un enregistrement dans une table A (dont la clef primaire serait par exemple X) à une date Y, de générer automatiquement dans une table B, jusqu'à trois enregistrements ?
    Ces trois enregistrements devant respecter les règles suivantes :
    une colonne Identifiant contiendrait la valeur correspondant à la clef primaire de la table A (pour mon exemple X).

    une colonne Echéance qui contiendrait :
    Y pour le premier enregistrement généré
    et Y + 18 mois pour le second et l'éventuel troisième enregistrement selon le calendrier suivant :

    janv-20 -> juil-21
    févr-20 -> août-21
    mars-20 -> sept-21
    avr-20 -> oct-21
    mai-20 -> nov-21
    juin-20 -> déc-21
    juil-20 -> janv-22
    août-20 -> févr-22
    sept-20 -> mars-22
    oct-20 -> avr-22
    nov-20 -> mai-22
    déc-20 -> juin-22

    Si on saisi une date entre janvier et juin 2020, l'échéance n'ira qu'en 2021 et il n'y aura que deux enregistrements dans la table B, si Y est comprise entre juillet et décembre 2020, l'échéance ira jusqu'en 2022 et il y aura alors trois enregistrements dans la table B

    le jour serait celui de la date Y.

    Je bloque complètement depuis un bon moment. Toute aide serait donc vraiment la bienvenue. Une ébauche de code et ce serait carrément Noêl avant l'heure.

    Un énorme merci par avance à toutes et à tous.

    JF

  2. #2
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Salut,
    Tu exposes plutôt bien ton problème. Tu as fait la moitié du boulot. Un problème bien posé est à moitié résolu.

    Tu as plusieurs possibilités pour réaliser ce que tu veux faire.

    1) Au moment où tu crées ton insertion dans la table A, tu insères tes 3 enregistrements.

    2) Tu peux utiliser un trigger sur ta table A et traiter tes insertions via du sql dans ta table B

    3) Apparemment, les données de la tables B sont la résultante des données de la table A
    Tu peux dans ce cas, créer une Vue (Table B) qui se génère avec les informations de la table A.

    Dans le cas 2 et 3, tu fais bosser le serveur SQL.
    Dans le cas 1, c'est le serveur Web qui bosse.

    Perso, j'aime l'idée d'une Vue (3). Mais j'opterais peut-être pour la création d'une classe métier qui ferait l'insertion dans la table B.
    Je n'ai pas tout le contexte pour faire le choix à ta place.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2020
    Messages : 26
    Par défaut
    Bonjour ma5t3r, et bonjour à toutes et à tous,

    Merci pour ces pistes.

    Au su de la condition imposée par l'échéance à 18 mois (donc une possibilité de saisie sur 2 à 3 ans selon la date initiale), j'ai peur que la solution 1 ne fasse mouliner le serveur Web inutilement.

    Pour la solution 2, étant novice, je n'ai jamais utilisé de Trigger, et je crains que ce ne soit trop compliqué à aborder pour moi.

    Reste la notion de vue (solution 3), qui semble plus correspondre à ma problématique. En effet, les données de la table B proviennent "en partie" de la table A

    Nom : Capture.PNG
Affichages : 164
Taille : 48,9 Ko

    Ma table A (affichée en colonne A) doit effectivement contenir les données saisies initialement. Ma problématique est d'arriver à générer la table B (affichée en colonne F) de façon à ce que cette table contienne les données de la table A, et que des lignes supplémentaires soient générées à 0 (colonnes H, K et L) en fonction de la date d'enregistrement saisie par le commercial (B22, C22 et D22) et uniquement si l'identifiant_ac est 3.
    Si le mois de date_ac est < à 7 alors il faut générer une ligne supplémentaire à 0 ( colonne H pour le prospect 1), sinon il faut générer deux lignes supplémentaires à 0 (colonnes K et L pour le prospect 3).

    Avec un update case when ... je parviens directement dans SQL server à partir de la table A à modifier l'échéance de la table B, mais je suis complètement paumé pour ce qui est de générer les enregistrements à zéro avec les règles ci-dessus depuis la page web lors de l'enregistrement des données en table A...

    Si les infos ci-dessus permettent de mieux comprendre mon souci, je suis preneur de toute piste ou aide complémentaire.

    Un ENORME MERCI par avance.

  4. #4
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Qu'est-ce qui détermine le nombre d'échéances ?

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2020
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2020
    Messages : 26
    Par défaut
    c'est la valeur de l'identifiant_ac et celle de la date_ac qui seront enregistrées dans la table A qui déterminent le nombre de lignes qui doivent être créées dans la table B

    Par rapport à l'enregistrement d'origine ("ligne initiale") dans la table A, lorsque je valide la sauvegarde des données saisies :

    Si l'identifiant_ac=3 et que le mois de date_ac >=7, alors je dois créer deux lignes supplémentaires dont la valeur des champs C?? sera à 0 et la valeur id_prospection sera identique à la ligne initiale.

    Si l'identifiant_ac=3 et que le mois de date_ac <7, alors je dois créer une ligne supplémentaire dont la valeur des champs c?? sera à 0 et la valeur id_prospection sera identique à la ligne initiale.

    Sinon (si l'identifiant est <>3) seule la ligne initiale présente dans la table A devra être copiée dans la table B.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE [dbo].[historique_ac]
    SET echeance = (
    	CASE 
    		WHEN [identifiant_ac]=3 and month([date_ac])<7 THEN 1
    		WHEN [identifiant_ac]=3 and month([date_ac])>=7 THEN 2
    		ELSE 0
    	END
    )
    Comme indiqué dans mon précédent post, avec le code ci-dessus exécuté directement dans SQL Server, je parviens à écrire 0,1 ou 2 dans la colonne échéance. Là, rien de compliqué.

    Ce que je ne parviens pas à faire c'est à générer directement depuis la page web (lors de l'enregistrement dans la table A) le nombre de lignes supplémentaires dans la table B correspondant à ces 0, 1 ou 2.

  6. #6
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Dans ton cas, je créerais un Model Echeance.

    Dans ton Model A, j'ajouterais une propriété $echeance qui instancierait la Classe Echeance qui aurait une méthode qui calcule les échéances et les insère en DB.

    Une méthode add_echeances($id, $ac, $date) par exemple

    C'est la méthode la moins chronophage à mon avis.

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

Discussions similaires

  1. [XL-2007] comment automatiser la saisie d'une colonne
    Par bambi98 dans le forum Excel
    Réponses: 3
    Dernier message: 07/11/2012, 11h20
  2. [XL-2007] Code pour automatiser une saisie avec sendkeys
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/07/2012, 16h34
  3. [MySQL] Automatiser une requête selon une saisie utilisateur
    Par johweb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/09/2011, 17h18
  4. Réponses: 0
    Dernier message: 26/01/2010, 16h01
  5. Une saisie dans plusieurs variables & Multiple de trois.
    Par McArthur dans le forum Débuter
    Réponses: 4
    Dernier message: 26/02/2008, 17h34

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