Regrouper par valeur pour implémenter l'incrémentation automatique du SERIAL personnalisé
Défi :
Dans un système de blog, vous disposez d'un tableau d'articles avec trois colonnes : id (séquence), catégorie (varchar) et catégorie_id (int). Vous souhaitez que lecategory_id s'incrémente automatiquement dans chaque catégorie tout en restant unique dans la table.
Invalidité de la logique personnalisée :
Essayer d'implémenter cela à l'aide de deux requêtes et d'un code logique distincts peut entraîner des problèmes de concurrence dans un environnement multi-utilisateurs.
Solution recommandée :
Rejeter la colonnecategory_id :
Calcul dynamique de la position de la catégorie :
<code class="language-sql">SELECT id, category, ROW_NUMBER() OVER (PARTITION BY category ORDER BY id) AS category_id FROM article;</code>
Exemple :
<code class="language-sql">INSERT INTO article(category) VALUES ('stackoverflow');</code>
Résultat :
<code>SELECT * FROM article WHERE category = 'stackoverflow'; +----+-----------+---------+ | id | category | category_id | +----+-----------+---------+ | 10 | stackoverflow | 1 | | 11 | stackoverflow | 2 | +----+-----------+---------+</code>
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!