1

データベースの行を削除すると、ID (auto_increment) が連続しなくなりました。1 2 3 4 5 6 7 8 9私が持っていて、行を削除すると仮定します3 4 51 2 3 4 5 6削除後、IDを代わりに表示したい1 2 6 7 8 9

どうすればこれを行うことができますか?

アップデート

このコードを使用して、データベースから生成されたコメントにシリアル番号を表示しています...(whileループ内)

     <?php  
            $serial = 0; 
            $serial++; 
            echo"<div class='commentserial'>
                  <div id='$serial'></div> 
                    <a href='#$serial'>$serial</a> 
                  </diV>";
      ?>

コメント表示にページネーション スクリプトを配置したので、2 ページ目をクリックすると、通し番号が 1 から $per_page Number に変わります。

そのため、データベース ID を使用すると、後続のページ分割されたページで番号付けが 1 から開始されないと感じました。

4

3 に答える 3

2

あなたがしたいことは良い習慣ではありません。主キーの穴はそこに残してはいけません。たとえば、別のテーブルに25メイン テーブルの ID への参照があるとします。メイン テーブルで何かが変更された場合、参照は突然別のレコードを指します。

同じことが、たとえば Web リンクにも当てはまります。のような URL を持つ

details.html?id=255 

突然別のレコードを指すのは非常に悪いことです。

完全なシリアル ID が必要な場合は、アプリケーション レベルで作成することをお勧めします。

于 2013-02-12T12:50:05.147 に答える
1

使用: SELECT * FROM table_name LIMIT オフセット、row_count

例:

if(isset($_GET['page'])) $page=$_GET['page'];
else                     $page=1;

$row_count=10;     

$offset=($page-1)*$row_count;
$sql="select * from table1 limit $offset,$row_count";
于 2013-02-12T13:17:19.563 に答える
0

autoincrement は、合成キーでのみ使用することを意図しています。これらのキーには意味的な意味がないため、キーが連続しているかどうかは問題ではありません。

ID 列にセマンティックな意味がある場合は、意味のある名前を付け、自動インクリメントを使用しないでください (必要に応じて、自動インクリメントを使用して新しい合成キーを作成することを検討できます)。

ページネーションを実装するには、データベース クエリを使用できます。mysql キーワードLIMITOFFSET. このように、リンクを生成するコードは、ID シーケンスの穴を気にする必要がありません。

于 2013-02-12T13:24:46.880 に答える