0

私は問題があります。データベース(my_database)を作成し、その中にテーブル(members)を作成し、フィールド(id、name、lastname、address)を作成しました。idフィールドは自動インクリメントに設定されています。これで5行になりました。つまり、idの値は1、2、3、4、5です。id3を削除すると、残っているのは「1 245」です。私の質問は、「1 245」を「123 4」に頼るにはどうすればよいですか?どんな助けでも大歓迎です。

更新:私のサイトでは、ループを使用してID番号にアクセスしているすべてのメンバーを表示しているため、この手段を講じる必要があります。または、データのIDを取得することも可能ですか?例このデータのデータがあります:id = 2、lastname = clyde、address=switzerland。姓の値だけでID値を取得するにはどうすればよいですか?

4

3 に答える 3

1

いくつかの理由から、実際にはそうしたくありません。

まず、ページが開いていると問題が発生する可能性があります。ユーザーがエントリの編集ページにいて、エントリid = 4を削除して、id = 3提案どおりにIDを更新するとします。ここで、編集者が送信を押すと、ID が自分のページから取得され、古いエントリ 4 の代わりに新しいエントリ 4 が更新されます。これは率直で単純な例ですが、それ以外にも多くのことがあります。このレベルではうまくいかない可能性があります。

第二に、これをプログラミングする際には多くの作業が必要です。まず、列を更新する必要があります。次に、MySQL が次のエントリに与える番号を認識していることも確認する必要があります。そして、そのすべてが、上記の点でそれほど多くの問題が発生しないことを確認する環境で機能する必要があります (これは非常に難しいことです)。これは、何もしない場合に比べて大変な作業です。

3 つ目の問題は、パフォーマンスのオーバーヘッドが大きいことです。何千ものエントリを持つデータベースがあり、ID の低いエントリを削除することを想像してみてください。突然、より高い ID を持つすべてのエントリを更新する必要があります。これは、サイトがこのタスクを実行していて、同時に他に多くのことを処理できないため、サイトが応答しなくなることを意味している可能性があります (実際、最初のポイントのような問題が発生しないようにするために、この更新プロセス全体から結果が得られる可能性があるため、同時に他のことを行わないようにする必要があります (または、データの別のコピーなどで作業するようにしてください)。

私の提案は、他の人が言っていることと一致します。そのままにしておいて、これについて心配する必要はありません。auto_increment各値に一意の識別子を簡単に付与するという 1 つの目的のみを目的としています。この識別子を使用して、同じエントリのみを識別して参照します。おそらく、これらの識別子でソートすることについて主張することもできますが、特定の順序を持​​つこと以上のものはありません (それでも、人々はこの使用法に反対するでしょう)。

ID を更新しようとする代わりに、この問題を解決する別の場所を探す必要があります。問題が純粋に自分の感じ方である場合、それは簡単です。気分が良くないかもしれませんが、これらすべての ID を更新することは、探している解決策ではないことを自分自身に納得させる必要があります。数値を別の場所で使用すると、問題の解決が少し複雑になる可能性があります。ただし、PHP を使用して各エントリの数値を生成する可能性は常にあります。これは、HTML コンテンツの生成に数値が使用される場合に、最も間違いなくそうする論理的な場所です。連番を使用する場所について詳細を提供すると、その場合の解決方法を調べることができます。

于 2012-10-26T16:01:05.733 に答える
0

次のステートメントを使用して、id値を手動で更新できます。

update members set id = (id-1) where id > 3;  

または、そのままにしておくことをお勧めします。その曖昧さを引き起こしていません。

于 2012-10-26T15:46:18.327 に答える
0

UPDATE クエリを実行することもできますが、ほとんどの開発者は ID をそのままにしておきます。重要な場合は、PHP で番号付けを行うことができます。

于 2012-10-26T15:20:30.030 に答える