ホームページ > データベース > mysql チュートリアル > データベース内のカテゴリ内でカスタム SERIAL 自動インクリメントを実装するにはどうすればよいですか?

データベース内のカテゴリ内でカスタム SERIAL 自動インクリメントを実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-14 08:27:43
オリジナル
241 人が閲覧しました

How to Implement Custom SERIAL Auto-Increment within Categories in a Database?

値でグループ化してカスタム SERIAL の自動増分を実装します

チャレンジ:

ブログ システムには、id (sequence)、category (varchar)、category_id (int) の 3 つの列を持つ記事テーブルがあります。 category_id をテーブル全体で一意に保ちながら、各カテゴリ内で自動的に増加させる必要があります。

カスタムロジックが無効です:

2 つの別個のクエリとロジック コードを使用してこれを実装しようとすると、マルチユーザー環境で同時実行の問題が発生する可能性があります。

推奨される解決策:

category_id 列を破棄します:

  • category_id 列は、id 列と category 列以外に追加情報を提供しないため、削除します。
  • 自動インクリメントされる ID 列を記事の一意の識別子として使用します。

カテゴリ位置の動的計算:

  • カテゴリ固有の識別子がまだ必要な場合は、row_number() 関数を使用して、カテゴリ内での各記事の位置を計算します。
<code class="language-sql">SELECT id, category, ROW_NUMBER() OVER (PARTITION BY category ORDER BY id) AS category_id
FROM article;</code>
ログイン後にコピー

例:

<code class="language-sql">INSERT INTO article(category) VALUES ('stackoverflow');</code>
ログイン後にコピー

結果:

<code>SELECT * FROM article WHERE category = 'stackoverflow';
+----+-----------+---------+
| id  | category  | category_id |
+----+-----------+---------+
| 10  | stackoverflow | 1 |
| 11  | stackoverflow | 2 |
+----+-----------+---------+</code>
ログイン後にコピー

以上がデータベース内のカテゴリ内でカスタム SERIAL 自動インクリメントを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート