1

データベース:

表:ニュース

列付き:ID、コンテンツ、タイトルと呼ばれる自動インクリメントされる一意の主キー


コード:

->テキストフィールドを使用してフォームを作成します。このフォームで、ユーザーはIDの値、つまりアイテムの位置を入力できます。

$form->textField("Position of the item item", "id", false, 30, false, getIfExists("id", $originalValues));

->新しいIDをクエリとしてデータベースに投稿します

$queryvalues["id"]       = $_POST[ "id" ];

他のアイテムで使用されていないIDを投稿すると機能します。ただし、IDを上書きしようとすると、エラーが発生し、何も変更されません。明らかに、IDを更新する必要があります。これにより、競合するすべてのIDがインクリメントされ、編集されたIDを投稿できるようになります。

これをどうやってやるのかちょっとイライラします。位置を定義するインデックス番号を追加してから、データベースIDでリストを並べ替えることに切り替え、CMSでIDを変更すると、CMSのユーザーが希望するときにいつでもそれを更新できるようになります。

しかし、私はこれにどのようにアプローチするか、そしてより良いオプション/解決策があるかどうかはあまりわかりません。

誰かが何かアイデア/ヒント/ヒントを持っていますか?

ON DUPLICATE KEY UPDATEを使用してみましたが、今のところうまくいきません。


編集:

了解しました。注文は現在機能しています。私はPositionという新しい列を作成し、それを使用してアイテムを注文しましたが、正常に機能します。

ただし、同じ位置に新しいアイテムを追加すると、別の位置に配置されます。したがって、基本的に、同じキーを共有しながら、新しい「0」は古い「0」の下にリストされます。これを修正する方法について何か提案はありますか?古い重複キーをインクリメントすることを考えていました。しかし、これが正確にどのように機能するかはわかりません。

4

3 に答える 3

3

id列には触れないで、そのままにしておきます。「position」という名前の新しい列を作成して使用すると、一意でない値が許可されます。

IDは、理由により常に一意になるように設定されており、自動インクリメントしても効果はありません。削除すると、id列に必然的にギャップが生じますが、これは問題ではありません。

于 2012-04-25T08:34:34.340 に答える
1

「主キー」は一意であり、永続的に保持されるように強制されます。これはエンティティの識別子であり、並べ替え/順序付けとして使用することを意図したものではありません。

要件を満たすには、intまたはdatetime/timestampフィールドを追加してからSELECT * FROM yoour_table ORDER BY field_name

于 2012-04-25T08:49:26.350 に答える
0

IDを使用してアイテムを注文することを理解しています。そうしないでください。

代わりに、「ordering」という名前の新しい列を追加します。

  • アイテムを挿入するときは、このフィールド値をID値に設定します
  • アイテムの位置を更新するときは、移動している2つのアイテム間で位置の値を交換します
于 2012-04-25T08:37:10.950 に答える