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 :

Numérotation automatique défaillante [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Numérotation automatique défaillante
    Bonjour,

    Je rencontre une problème assez cocasse et je ne trouve pas de solution plossible .

    Je m'explique :

    J'ai un base test PHPMyadmin dans la quelle je viens alimenter une table de 60 colonnes. Il y a 2 types de formats , du texte et du numérique selon les colonnes. Il a y bien entendu une clef primaire qui est un numéro automatique. Ce numéro s'incrémente au fur et à mesure de l'alimentation des lignes.

    Sauf que j'en ai découverte une bien bonne en contrôlant les données :

    L'incrémenteur dérappe et me gonfle le compteur .

    Supposons que je pousse une fichier de données de 100 000 lignes. J'aurai un compteur de 1 à 90 000 , rien de 90 001 à 100 000 puis une reprise de 100 001 à 110 000 . C'est comme ci des lignes disparaissaient ou bien qu'il y avait des lignes fantomes.

    Requête SQL que j'utilise pour faire mon import de données :

    Code MYSQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LOAD DATA INFILE 'C:\mondossier\monfichier.csv' 
    replace INTO TABLE matable FIELDS TERMINATED BY ';' ;

    J'ai controlé , j'ai:

    - aucune perte de données car je retrouve bien toutes les lignes dans la base.
    - le compteur augmente de façon aleatoire tout seul, quand je vais dans mes BDD >> ma base >> ma table >> opération >> je contrôle le chiffre afin de m'assurer de la position du compteur qui est 1 fois sur 2 plus loin que le nombre de ligne réelle de la base. (exemple 100 000 ligne en base , 110 000 pour le compteur automatique).
    - aucune ligne vide dans mes fichiers txt ou csv que je pousse dans la table.

    La "trou" dans le comptage est complétement aléatoire , défois c'est 10 lignes pour un gros fichier , comme cela peut être 4000 à 5000 lignes pour un fichier ridicule de 10 lignes.

    Pour information j'alimente ma table via des fichiers CSV ou txt par un .bat qui execute un qbquery mysql.

    Merci de m'aiguiller.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    D'apres les informations qu'on trouve, mysql reserve les id pour l'insertion mais ne reserve pas le nombre exact. Ca peut donc laisser des trous.

    Cependant les id n'ont que l'obligation d'être uniques, pas de se suivrent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Salut,
    Je pense que soit lors de la création de ta table tu as forcé le SGBD de commencer la numérotation à partir de 10 soit tu as fait une suppression de 10 lignes auparavant.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par Kasko
    Salut,
    Je pense que soit lors de la création de ta table tu as forcé le SGBD de commencer la numérotation à partir de 10 soit tu as fait une suppression de 10 lignes auparavant.
    Justement non je ne supprime aucune ligne. A la limite j'update les lignes pour test puis je la réinjecte en base pour écraser l'ancienne.

    Citation Envoyé par sabotage
    D'apres les informations qu'on trouve, mysql reserve les id pour l'insertion mais ne reserve pas le nombre exact. Ca peut donc laisser des trous.

    Cependant les id n'ont que l'obligation d'être uniques, pas de se suivrent.
    D'où les approximations du nombre de lignes lors de l'aperçu ?

    C'est vraiment très génant car comment peut procéder à un algorithme sur la base qui demanderait l'utilisation d'une boucle for ?

    Il n'y a pas un moyen de mettre d'une autre manière les "rank" avec " rankcolumn " ou " rankline " du coup ?

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    On ne travaille pas comme ça avec un SGDB justement
    Que veux-tu faire exactement ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Je vais dire avant même d'importer ton CSV(lors des tests par exemple) t'es sûr que t'as rien supprimé dans ta table et t'as pas aussi ordonné le SGBD de commencer la numérotation à partir de 10?La plupart de temps cela arrive si par exemple l'on exporte sa base ou sa table avec des enregistrements.Donc le jour où l'on importe le même script,par défaut la nouvelle numérotation commence à partir du dernier enregistrement(11 si le dernier enregistrement est 10) sauf si l'on personnalise.Pour ce qui de la mise à jour,je pense pas que ça peut impacter la numérotation sauf si tu touches à l'identifiant.Sinon si j'ai bonne mémoire,quand on exécute un fichier CSV,ce dernier s'assure d'abord que l'identifiant n'existe pas en base avant d'insérer une ligne sinon il passe à l'enregistrement suivant.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sabotage Voir le message
    On ne travaille pas comme ça avec un SGDB justement
    Que veux-tu faire exactement ?
    Je souhaite que mon id , soit :

    - un numéro affecté de façon automatique
    - l'id doit être égal au numéro de la ligne (si id = 60 000 alors la ligne de données est la 60 000 et pas la 65 000)
    - l'id est à la fois un id est un numéros d'ordre. Exemple dans le cadre de l'execution d'une boucle for.

    Citation Envoyé par Kasko Voir le message
    Je vais dire avant même d'importer ton CSV(lors des tests par exemple) t'es sûr que t'as rien supprimé dans ta table et t'as pas aussi ordonné le SGBD de commencer la numérotation à partir de 10?
    J'ai pris soin de faire comme suit :

    - création d'une nouvelle table
    - injection de X ligne en base
    - maj d'un certain nombre de ligne (dont écrasement des précédentes)
    - ajout de nouvelles lignes

    Citation Envoyé par Kasko Voir le message
    La plupart de temps cela arrive si par exemple l'on exporte sa base ou sa table avec des enregistrements.Donc le jour où l'on importe le même script,par défaut la nouvelle numérotation commence à partir du dernier enregistrement(11 si le dernier enregistrement est 10) sauf si l'on personnalise.Pour ce qui de la mise à jour,je pense pas que ça peut impacter la numérotation sauf si tu touches à l'identifiant.Sinon si j'ai bonne mémoire,quand on exécute un fichier CSV,ce dernier s'assure d'abord que l'identifiant n'existe pas en base avant d'insérer une ligne sinon il passe à l'enregistrement suivant.
    Il est vrai que le second problème (toucher à un numéro auto) m'a déjà conduit à ce que ma numérotation saute et foire. Mais je n'ai pas touché dans ici dans le cas présent du problème actuel.

    On est bien avec ma table test de 100 000 lignes ici .

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu me redis ce que tu aimerai du point de vue mysql mais tu ne me dis pas pourquoi.
    Les résultats d'une requête ne se parcoure pas avec une boucle for justement.
    L'id est un reference, pas une position de classement. Dis nous ton besoin fonctionnel exact et on pourra te dire comment le réaliser.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Citation Envoyé par tanaka59 Voir le message

    J'ai pris soin de faire comme suit :

    - injection de X ligne en base
    - maj d'un certain nombre de ligne (dont écrasement des précédentes)
    - ajout de nouvelles lignes
    Peut-tu nous expliciter cela et si possible nous dire comment t'as fait avec ces lignes au moments où tu veux importer ton CSV?

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

Discussions similaires

  1. Numérotation Automatique Personnalisée
    Par Dhumkazaar dans le forum Access
    Réponses: 4
    Dernier message: 10/05/2006, 20h34
  2. Numérotation automatique sous-formalaire
    Par stephane_37 dans le forum Access
    Réponses: 1
    Dernier message: 23/01/2006, 17h05
  3. [JTable] Numérotation automatique des lignes...
    Par lilou77 dans le forum Composants
    Réponses: 2
    Dernier message: 20/12/2005, 10h29
  4. Numérotation automatique de ligne
    Par jag2005 dans le forum Langage
    Réponses: 6
    Dernier message: 02/10/2005, 12h03
  5. Numérotation automatique selon les utilisateurs
    Par Safaritn dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 12/08/2005, 14h11

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