Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème relatif à l'auto_increment

Incrémenter l'id à partir de l'id la plus grande

Sujet résolu
    12 février 2006 à 20:02:55

    Bonjour à tous.

    Bien qu'ayant recherché en long et en large, je n'ai pas trouvé de réponse précise à mon problème :

    J'utilise une table pour stocker les articles de mon site, à la manière du module de news.
    J'ai donc crée deux pages d'administrations qui permettent d'ajouter et de modifier les articles, comme dans le module de news proposé par M@teo21.

    Mais je voulais aussi pouvoir changer l'ordre de mes articles, et aussi pouvoir en supprimer.

    Mais voila, lorsque je supprime un article, bien que je décale tous les id pour combler le "trou", l'auto_increment de MySQL, lui, n'en prend pas compte.

    Par exemple, la page est vide.
    Je crée un article d'id 1 (normal).
    Ensuite, j'en crée un deuxieme d'id 2 (jusque là, tout va bien).
    Puis enfin un troisième, d'id 3.

    La table ressemble alors à ça :
    -id=1 article=1
    -id=2 article=2
    -id=3 article=3

    Alors, je décide de supprimer l'article 2.
    A ce moment, l'article 3 prend pour id 2.

    La table :
    -id=1 article=1
    -id=2 article=3

    Ensuite, je crée un quatrième article, et là, au lieu de l'incrementer à 3, l'auto_increment met 4.
    La table :
    -id=1 article=1
    -id=2 article=3
    -id=4 article=4

    Et par la suite, ça pose problème pour inverser l'article 1 et l'article 2.

    Existe-t-il une fonction qui permet d'indiquer à l'auto_increment qu'il doit commencer par la plus grande valeur d'id ? Ou alors faut-il que j'oublie l'auto_increment et que je détermine l'id des articles par un code ? Si oui, avez-vous une idée de comment faire ?

    Merci de votre aide


    PS:J'ai essayer d'utiliser la fonction SQL "OPTIMIZE TABLE" qui n'a rien donné, quelqu'un en sait plus sur son fontionnement ?
    • Partager sur Facebook
    • Partager sur Twitter
      13 février 2006 à 2:30:12

      La requête "SELECT id FROM articles ORDER BY id DESC LIMIT 0,1" te retournera le dernier id de ta table.
      Tu peux alors forcer l'id de ton article suivant. Mais attention, si vous êtes plusieurs à travailler sur la base en même temps, ça posera sûrement problème.

      Sinon, tu ne passes pas par l'auto_increment et tu te fais un fichier compteur, mais là encore problème si vous êtes plusieurs.

      Ne serait-il pas possible de rajouter un champs "ordre" ou quelque chose du genre dans ta table ? Tu n'aurais alors plus qu'à faire un "ORDER by ordre"... Et en ne mettant que des valeurs paires à tes indexes d'ordre, il te reste les impairs pour faire tes inversions...

      J'espère t'avoir aidé et ne pas avoir dit de bêtises...
      • Partager sur Facebook
      • Partager sur Twitter
        13 février 2006 à 6:49:00

        Citation : vanderic

        La requête "SELECT id FROM articles ORDER BY id DESC LIMIT 0,1" te retournera le dernier id de ta table.


        C'était ewctement ce que je cherchais :p , je vais essayer ça ce soir, et à défaut j'essaye les autres méthodes.

        Je vous tient au courant

        Merci beaucoup
        • Partager sur Facebook
        • Partager sur Twitter
          13 février 2006 à 8:07:34

          "SELECT max(id) FROM articles"
          devrait aussi fonctionner, à tester :)
          • Partager sur Facebook
          • Partager sur Twitter
            13 février 2006 à 22:54:50

            Citation : SkAnker

            "SELECT max(id) FROM articles"
            devrait aussi fonctionner, à tester :)



            J'avais déja testé, j'ai pas réussi (il faut aussi savoir que je sais pas trop m'en servir)


            Mais j'ai cependant résolu le problème :


            En effet, il faut se passer de l'auto_increment

            Ainsi, lorsque j'insère un article

            $idarticle = mysql_query('SELECT id FROM articles ORDER BY id DESC LIMIT 0,1');
            $idnouveauarticle = mysql_result($idarticle,0) + 1;
            mysql_query('INSERT INTO articles VALUES("'.$idnouveauarticle.'","'.$_POST['titre'].'","'.$_POST['contenu'].'")');

            (sans oublier de désactiver le auto_increment pour le champ id)

            Pour le supprimer :

            mysql_query("DELETE FROM articles WHERE id=".$_GET['idsuppr']);
            mysql_query('UPDATE articles SET id=(id-1) WHERE id>'.$_GET['idsuppr']);


            Un grand MERCI à vous, plus spécialement à vanderic
            • Partager sur Facebook
            • Partager sur Twitter

            Problème relatif à l'auto_increment

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown