0

タイトルが少しずれているかもしれませんが、どう説明したらいいのかわかりません。

私は現在、ユーザーがWebインターフェイスから画像をアップロードできる写真ポートフォリオに取り組んでいます。これが行われると、次のことが起こります。

画像はHTMLフォーム->PHPを介してアップロードされます。次の情報を保持するSQLレコードが作成されます。

ID (Autoincrement) - Image title - Image Desc - Filepath

ユーザーは、Webインターフェイスの別のページを介してアップロードを管理することもできます。これが発生すると、SQLレコードはファイルと一緒に削除されます。ただし、ユーザーが新しいファイルを追加すると、次のID番号が使用され、データベースには、削除されたレコードがあった場所に空きスペースが残ります。

これは、自動インクリメントがユーザーに表示されるIDに使用されるのではなく、他の目的に使用されるためであると理解しています。ただし、この情報を使用して画像ビューアに写真番号を表示しているので、より適切なアプローチが必要です。私が必要としているのは、基本的に、レコードを削除するときに作成されるギャップを埋めるintを含むMySQL列です。例えば:

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8

レコード5を削除するときに、ギャップを埋めるためにIDが必要なので、代わりに

1 - 2 - 3 - 4 -   - 6 - 7 - 8

取得1-2-3-4-4-5-6-7

助言がありますか?

ご協力いただきありがとうございます。:-)

4

2 に答える 2

2

MySQLにはこれを自動的に行うための優れた機能がありませんが、次のような方法で手動で行うことができます。

SELECT sequence_number FROM photo WHERE photo_id = 729; -- This would be 5.
DELETE FROM photo WHERE photo_id=729;
UPDATE photo SET sequence_number = sequence_number - 1 WHERE sequence_number > 5;

クエリには、番号が連続することを意図した一連の画像を記述するUPDATE他の条件(たとえば、マッチング)を含めることができます。album_id

ただし、常にユーザーに連番を表示している場合、なぜそれをデータベースに保存する必要があるのでしょうか。PHPコードが結果を反復処理している場合は、そこに数値を追加するだけです。

$sequence_number = 1;
while ($row = mysql_fetch_assoc($results)) {
    // ... Display everything ...
    $sequence_number++;
}
于 2012-07-09T12:40:07.433 に答える
-1

試す:

SET @count = 0;
UPDATE `<table>` SET `<table>`.`<column>` = @count:= @count + 1;

上記のクエリはループして各行を調べ、<column>フィールドを順次整数で更新します。

これはあなたの質問に答えるはずですが、私の理解では、画像ビューアに関するあなたの問題は完全に異なるものであり、自動インクリメントの問題とは関係がないかもしれません。

于 2012-07-09T12:43:49.570 に答える