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

Langage PHP Discussion :

insertion de ligne entre 2 id


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Points : 336
    Points
    336
    Par défaut insertion de ligne entre 2 id
    Bonjour à tous,
    voici mon soucis

    j'ai une facture que j'affiche dans une "sorte" d'iframe.
    j'ai rajouté une petite fonction ajax qui me permet de rajouter des lignes à la suite de cette facture
    or on me demande de pouvoir insérer des lignes entres d'autres lignes

    pour le moment dans ma bdd (qui tourne avec un auto_increment) j'ai prévu un champ ordre en double(8,3) que j'incrémente de 1 entre chaque ligne
    aujourd'hui si on me demande de changer une ligne de place je le fait manuellement dans ma bdd

    or je ne sais pas trop comment faire pour faire ça automatiquement
    je m'explique

    si j'ajoute une ligne entre l'ordre 2.000 et 3.000 je serais tenté de lui donner automatiquement comme ordre 2.001
    mais si plus tard je veux en rajouter une entre 2.000 et 2.001 je suis bloqué ...

    j'espère que vous avez compris mon soucis
    et si vous voyez une solution ou que vous connaissez quelqu'un qui a eu un soucis similaire je suis preneur d'une solution ou d'une idée de solution

    en vous remerkiant par avance !
    Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière

  2. #2
    Membre régulier Avatar de guigouz
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 84
    Points : 102
    Points
    102
    Par défaut
    Je ne suis pas sûr d'avoir complètement compris ce que tu souhaites...
    Cependant, il me semble que le plus simple pour ne pas te retrouver "bloqué" est de ne pas utiliser un ordre avec des virgules (12,001...) mais plutôt des entiers que tu "décales" si tu dois insérer une valeur entre deux autres...
    Pour réaliser cela simplement, tu peux faire un trigger (= déclencheur) si ton SGBD le permet : avant d'insérer une nouvelle ligne, tu regardes son ordre et si elle doit être insérée entre deux lignes tu fais un update :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE TRIGGER insLigne BEFORE INSERT ON LIGNE
    DECLARE
        rangMax INT;
    BEGIN
        select into rangMax MAX(ordreLigne) FROM LIGNE where codeFracture = NEW.codeFacture;
        IF new.ordreLigne < rangMax THEN
            UPDATE LIGNE SET
            ordreLigne = ordreLigne + 1
            WHERE ordreLigne > NEW.ordreLigne
            AND codeFacture = NEW.codeFacture;
        END IF;
    END;

    Voila c'est codé avec les pieds a deux heures du mat mais j'espère que ça peut t'aider... Si ta BDD n'est pas construite comme ça (je me base sur des hypothèses vis-à-vis de ta conception) donne nous la structure des tables. Si ton SGBD n'accepte pas les trigger, alors il faut faire la même chose en php...
    Bonne continuation
    Bonsoir...

  3. #3
    Membre averti Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Points : 336
    Points
    336
    Par défaut
    merci beaucoup guigouz mais j'ai aussi réfléchi ce week end et trouvé une solution faite avec les pieds et sans trigger
    le principe reste le même que le tiens sauf que je fais ça via php tout simplement
    je récupère à l'insertion l'ordre auquel je veux placer ma ligne et j'update de 1 les lignes suivantes
    si j'ai en 'ordre'
    1
    2
    3
    4
    et que je veux insérer ma nouvelle ligne en 2, j'update d'abord ...
    1
    3
    4
    5
    et ensuite j'insère ma ligne en 2

    c'est logique mais je n'y avais pas pensé du tout

    merci quand même de ton aide
    Pour voir qu'il fait noir, on n'a pas besoin d'être une lumière

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/07/2010, 16h18
  2. Insertion de ligne en VBA entre différents classeurs
    Par Triad30 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/06/2010, 14h59
  3. Comment faire un retour ligne entre des " ??
    Par DrTank dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 09/05/2005, 09h35
  4. Empêcher le retour á la ligne entre des balises <Hx> e
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 29/11/2004, 16h39
  5. [Eclipse 3][Format Source] Sauts de ligne entre attributs
    Par sylvain_2020 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 25/08/2004, 16h04

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