Maison >base de données >tutoriel mysql >Comment attribuer des numéros séquentiels aux lignes d'un tableau en fonction de regroupements ?
Numérotation automatique des lignes dans un tableau par groupe
Ce guide montre comment attribuer automatiquement des numéros séquentiels aux lignes au sein des groupes d'un tableau, en s'adressant spécifiquement au tableau address_history
où le regroupement est basé sur la colonne person_id
. Bien que plusieurs méthodes existent, nous nous concentrerons sur l'utilisation d'une colonne série et d'une fonction fenêtre.
Méthode 1 : Utiliser une colonne série (recommandée)
L'approche la plus simple consiste à exploiter une colonne série ou IDENTITÉ. Cela génère automatiquement des numéros séquentiels uniques.
<code class="language-sql">CREATE TABLE address_history ( address_history_id SERIAL PRIMARY KEY, person_id INT NOT NULL REFERENCES people(id), created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, previous_address TEXT );</code>
La colonne SERIAL
(address_history_id
) s'incrémente automatiquement, fournissant la numérotation séquentielle souhaitée pour chaque ligne.
Méthode 2 : Utiliser une fonction de fenêtre (alternative)
Si une colonne série n'est pas réalisable, une fonction de fenêtre propose une solution. Cette méthode crée une vue qui ajoute une colonne de numéros séquentiels.
<code class="language-sql">CREATE VIEW address_history_nr AS SELECT *, ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY address_history_id) AS adr_nr FROM address_history;</code>
Cela génère une vue (address_history_nr
) contenant une colonne supplémentaire (adr_nr
) avec des numéros séquentiels au sein de chaque person_id
groupe. Cette vue remplace la table dans les requêtes.
Remarques importantes :
TIMESTAMP WITH TIME ZONE
pour les champs d'horodatage pour une meilleure gestion des fuseaux horaires.previous_address
. Conserver les adresses actuelles et précédentes peut entraîner des incohérences dans les données.Cette approche garantit une numérotation séquentielle efficace et précise au sein des groupes, améliorant ainsi la gestion des données et les performances des requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!