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 :

numeroter l'ID par order


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut numeroter l'ID par order
    Bonjour,

    Si j'ai une table peson (ID,Nom, Prénom)
    et j'ai ajouter des information par hasard:

    ID Nom Prénom
    ------------------
    1 aaa aaa
    2 aaa aaa
    3 aaa aaa
    4 aaa aaa

    Si je supprimer toutes les information et je veux ajouter des nouvelles, dans cette cas il ajoute automatiquement des ID qui commencent par 5,
    la question est comment je peut rajouter des ID qui commencent par 1
    et si je supprime la personne avec un ID=2, comment je peux rajouter une autre personne qui doit prendre le ID=2.

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    Quand tu vas supprimer tous les enregistrements, utilises truncate mais pas delete.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    TRUNCATE TABLE nomDeLaTable;

    A+

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    Merci, Et si je supprime un ligne de donne, comment le fait ?
    ca veut dire, faire Delete from table... et apres je fais insert into...


    Citation Envoyé par andry.aime Voir le message
    Bonjour,
    Quand tu vas supprimer tous les enregistrements, utilises truncate mais pas delete.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    TRUNCATE TABLE nomDeLaTable;

    A+

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Théoriquement, il n'y a pas lieu de se focaliser sur cette donnée, c'est un auto_inrement, et il est a pour garantir l'unicité de chaque ligne, c'est donc normal est logique que MySQL ne réutilise pas une donnée qui a été déjà utilisée.
    Le faire c'est prendre le risque d'avoir une Bdd corrompue.
    On s'en fiche de leur valeur, ou du moins, il y a pas lieu d'y toucher. Sauf si on sait ce qu'on fait, évidemment.

    Le seul cas, c'est celui qu'évoque andry.aime, c'est lorsqu'on souhaite repartir à 0. Mais là faudra faire gaffe aux tables qui sont liées au même ID, sinon, ça va partir en sucette.

    Si tu veux faire des classement, faut le faire sur d'autres champs :
    SELECT machin FROM table ORDER BY nom
    ou SELECT machin FROM table ORDER BY prenom
    ou encore SELECT machin FROM table ORDER BY nom, prenom
    etc ...

    Si cela te conviens pas et que tu souhaite ton propre classement, suffit de créer un nouveau champ pour ça, genre "ordre". Suffit d'enregistrer une incrémentation. (1, 2, 3, etc ...)
    Ce qui donne : SELECT machin FROM table ORDER BY ordre ... et hop, tout sera classé comme on veut.
    C'est simple, efficace, et on ne touche pas à une donnée propre au fonctionnement de la Bdd.

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    D'accord d'accord , Merci pour votre explication détaillé.

    Une question concernant de supprimer les information dans les tables liées
    au même ID est ce qu'il faut le faire manuellement (suppression dans chaque table) ou bien il y a une autre méthode qui supprime tous les info. reliées ?
    Excuse moi de mes question mais pour en savoir et avoir l'expérience.

    Merci d'avance

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    En 1er, je remarque que tu prends l'habitude de citer l'intégralité du post précédent (bien souvent dans d'autre post).
    Je t'assure, ça ne sert à rien, sinon qu'alourdir le forum pour rien, et en plusde rallonger tes post.
    Je sais ce que j'ai écrit, non ?
    Ca y est juste avant. A quoi bon tout reprendre ?

    Au mieux, on reprend, on cite une toute petite partie du post, une phrase, juste pour améliorer/donner du sens ce qu'on dit par la suite.

    C'était une petite parenthèse


    Une question concernant de supprimer les information dans les tables liées
    au même ID est ce qu'il faut le faire manuellement (suppression dans chaque table) ou bien il y a une autre méthode qui supprime tous les info. reliées ?
    Théoriquement il faut le faire manuellement. C'est la solution la plus simple.(et de loin même).
    Il ne faudra pas oublier de le faire cependant, sinon la Bdd ne serait plus intègre.

    Mais tout ceci dépend en 1er du moteur MySQL (ou du type de Bdd), et j'en citerais que 2 :
    MyISAM : La suppression manuelle est la seule solution.

    InnoDB : On peu le faire car ce moteur offre le coté Relationnel (SGBD-R), mais ça demande de savoir quels types d'instructions qu'il faut rajouter lors de la création des tables.
    Il faut entre autre indiquer les références/relations entre les tables/champs, et indiquer les suppression/misent à jours en cascades qu'il sera à faire.
    Mais ici il faut vraiment savoir ce qu'on fait, et leur impactent.
    C'est un peu plus compliqué que la 1ère solution.

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 67
    Par défaut
    Oui, vous avez raison, et c'est lourd au forum..
    dès le maintenant je prend une petite partie
    Alors il faut le faire manuellement... pas de problème.


    Citation Envoyé par RunCodePhp Voir le message
    En 1er, je remarque que tu prends l'habitude de citer l'intégralité du post précédent (bien souvent dans d'autre post).
    Je t'assure, ça ne sert à rien, sinon qu'alourdir le forum pour rien, et en plusde rallonger tes post.
    Je sais ce que j'ai écrit, non ?
    Ca y est juste avant. A quoi bon tout reprendre ?

    .

  8. #8
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Alors il faut le faire manuellement... pas de problème.
    Qu'on s'entende bien sur le manuellement : c'est à dire qu'il y aura rien d'automatique venant directement de MySQL.

    Par contre, de créer soit même les requêtes SQL (comme toutes requêtes, avec ou sans Php) dans son projet (pages) qui supprimera les lignes dans toutes les tables liées.
    On peu donner une sorte d'automatisme au final si tout est bien goupillé.
    C'est manuel sans être manuel quoi

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le mieux est quand même d'utiliser le moteur InnoDB pour ses tables et de placer avec justesse les FOREIGN KEY et leur complément ON DELETE CASCADE !

    Avec une seule requête de suppression, on supprime tout ce qui est lié !

    Exemple pour un jeu ou les personnages possèdent des exemplaires d'objets. Supprimer le personnage dans la table Personnage supprimera automatiquement la possession des objets dans la table associative reliant les personnages et les objets.

    Personnage (p_id, p_nom...)
    Objet (o_id, o_nom...)
    Possession (pos_id_objet, pos_id_personnage...)

    Avec ON DELETE CASCADE sur la clé étrangère pos_id_personnage, et avec la simple requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM Personnage
    WHERE p_nom = 'CinePhil'
    MySQL supprimera automatiquement dans la table Possession toutes les lignes du personnage supprimé.

    C'est quand même plus pratique que de supprimer d'abord les lignes de la table associative puis le personnage (2 requêtes au lieu d'une).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Tri par ORDER BY et INDEX sur les champs triés
    Par grandelo dans le forum Requêtes
    Réponses: 6
    Dernier message: 28/09/2010, 11h55
  2. Réponses: 7
    Dernier message: 28/03/2007, 13h57
  3. Numeroter les tables par rapport aux contraintes
    Par nicassy dans le forum Outils
    Réponses: 10
    Dernier message: 02/02/2007, 11h39
  4. Trier les lignes de ma ReadSheet par order decroissant de ma col 2 ?
    Par antoine.dandois dans le forum Général VBA
    Réponses: 2
    Dernier message: 17/01/2007, 19h40
  5. où trouver ordre utilisé par order by
    Par mussara dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 02/09/2005, 17h35

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