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

Administration MySQL Discussion :

[débutant][Auto_Increment] Réutiliser les valeurs


Sujet :

Administration MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut [débutant][Auto_Increment] Réutiliser les valeurs
    Bonjour,

    J'ai actuellement une table qui représente des factures.
    Chaque facture est représentée par un ID auto-incrémenté. Admétons que je crée une facture qui a comme ID x, puis une qui a comme ID x+1, puis une autre qui a comme ID x+2, le tout automatiquement par l'auto-increment.

    Maintenant, je décide que la facture qui a comme ID x est fausse, je dois la supprimer (le client a annulé, ou quelle que soit la raison). Celà pose un problème au niveau comptable, puisque les ID ne sont pas réutilisés, donc nous avons un numéro de facture non utilisé dans la comptabilité.
    Est-il possible de réutiliser ce numéro de facture qui a été supprimé et ce même si d'autres numéros de factures plus grands sont présents?

    Est-ce une configuration de mySQL ou une configuration de la table ?

    Merci d'avance

    F.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Il est fortement déconseillé (pour ne pas dire proscrit) de réutiliser des valeurs auto-incrémentées qui ont été supprimées. Il faut en laisser la gestion à MySQL.
    C'est pourquoi, pour numéroter les factures, il est préférable, à mon avis, de s'appuyer sur une autre colonne dans la table, que tu pourras manipuler comme tu le souhaites.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Salut ced,

    Dans ce cas, y a-t-il un moyen de récupérer l'entier le plus bas non utilisé dans une collone d'une table en mySQL ? Car sinon, je ne vois pas trop comment je peux faire.

    Merci

    Fred

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    J'ai bien une requête qui fait ça, mais si la table est grosse, ça va prendre un peu de temps.
    En fait, cette requête liste tous les "trous" dans une colonne avec une suite numérique :
    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
    SELECT t.num, COALESCE((
      SELECT num + 1
      FROM matable t1
      WHERE t1.num = (
        SELECT MAX(t2.num)
        FROM matable t2
        WHERE t.num > t2.num
      )
    ), 0) as pb
    FROM matable t
    WHERE t.num <> COALESCE((
      SELECT num + 1
      FROM matable t1
      WHERE t1.num = (
        SELECT MAX(t2.num)
        FROM matable t2
        WHERE t.num > t2.num
      )
    ), 0)
    and t.num > 1
    Je suis certain que ça doit pouvoir s'optimiser, mais je n'y ai pas vraiment réfléchi (vu que ça faisait ce que je cherchais à l'époque)...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Je pense qu'il s'agit d'un faux problème.
    Un programme de facturation ne fait que reproduire de manière informatique ce qui était fait manuellement sur des blocs préimprimés dont chaque folio portait un numéro unique. Les numéros doivent être sans trou. Donc, une facture erronnée (quelle qu'en soit la raison) est marquée "annulée", mais jamais supprimée.
    Les règles comptables n'imposent pas que les numéros de factures se suivent. Seuls les numéros d'écritures doivent être continus, sans trou, et cela, par journal.
    Si tu appliques ces règles, ton problème de numéro n'existe pas.

  6. #6
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Citation Envoyé par jeca Voir le message
    Bonjour,

    Je pense qu'il s'agit d'un faux problème.
    Un programme de facturation ne fait que reproduire de manière informatique ce qui était fait manuellement sur des blocs préimprimés dont chaque folio portait un numéro unique. Les numéros doivent être sans trou. Donc, une facture erronnée (quelle qu'en soit la raison) est marquée "annulée", mais jamais supprimée.
    Les règles comptables n'imposent pas que les numéros de factures se suivent. Seuls les numéros d'écritures doivent être continus, sans trou, et cela, par journal.
    Si tu appliques ces règles, ton problème de numéro n'existe pas.
    Oui, on est d'accord. Maintenant Je crée sur mon programme une facture, qui n'existe pas encore matériellement. J'y met ma recette de produits et de services divers et variés. Puis, le lendemain, au moment d'imprimer la facture pour l'envoyer au client, je recois un mail comme quoi la boite a fait faillite, le PDG s'est sauvé aux bahamas avec tout l'argent, il s'est acheté une île en territoire international, bref, la boite est morte. Je fais quoi de ma facture ?
    Je la supprime, elle n'a plus lieu d'être, puisqu'elle n'a même pas existé (une facture existe à partir du moment ou elle a été éditée et imprimée), et la boite à laquelle elle est destinée n'existe plus non plus...
    Alors voilà mon soucis, et si la personne crée une facture par erreur (ca arrive des fois avec les secrétaires têtes de linotes qui ont du mal avec l'informatique) ca nous fait un ID de perdu. Je ne travaille pas en France mais au Japon, peut être que les règles en France sont ainsi, mais mon boss m'a demandé que celà soit fait ainsi, donc je ne peux que lui obéir

    Merci ced pour la requête, je la testerai plus tard, étant passé à autre chose pour le moment, mais je la garde au chaud, et j'intuite qu'elle est correcte puisque tu l'as utilisée, donc je mets résolu, si un quelconque problème se présente, je reviendrai ici ^^

    F.

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

Discussions similaires

  1. [Débutant]combobox dont les valeur font apparaitre un tableau
    Par antoine2933 dans le forum Conception
    Réponses: 2
    Dernier message: 24/06/2011, 15h55
  2. débutant, Utiliser toutes les valeurs d'un array
    Par nkordiko dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/04/2010, 22h32
  3. Réponses: 1
    Dernier message: 26/06/2007, 12h26
  4. Réponses: 6
    Dernier message: 01/12/2006, 17h32
  5. Réponses: 5
    Dernier message: 23/08/2006, 19h42

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