0

Webポータルに表示される記事の順序を決定するこのテーブルがあります:-

Table- ARTICLE_POSITION
`article_id` int(12) NOT NULL,

`article_position` int(11) NOT NULL

これはテーブルのサンプルデータだと言います:-

article_id     article_position
56             1
58             2
443            3
88             4
5667           5
322            6

関連する記事を表示するために、クエリを使用して article_position に従ってそれらを並べ替え、Web ページに表示します。問題は、記事を別の位置に移動しようとすると、記事 5667 を位置 5 から位置 1 に移動したいということです。 UPDATEクエリを使用して、1から5の間にある各記事の位置を更新するには

最終テーブル構造

article_id     article_position
5667           1*
56             2*
58             3*
443            4*
88             5*  
322            6

(*位置更新)

データベースが大きい場合、この更新クエリは非常に時間がかかり、非効率的になります。それを行う他の方法はありますか....

4

2 に答える 2

1

私はあなたがarticle_positionの順序の任意の時点で挿入する解決策を探していると仮定しています。すべてのarticle_idのarticle_positionを更新する必要がないという解決策は考えられませんが、article_positionが変更されるたびに更新する必要性を相殺することはできます。各article_positionを1ずつインクリメントするのではなく、増加した位置増分(5、10、25、100など)を介して挿入するためのパディングを追加します。これにより、他のすべての記事を更新しなくても、既存の記事のarticle_positionを変更する余地が残ります。

あなたの例で示すために:

article_id     article_position
56             5
58             10
443            15
88             20
5667           25
322            30

再注文後(* =更新されたarticle_position)

article_id     article_position
5667           2*
56             5
58             10
443            15
88             20
322            30

最終的には、一部の記事間の挿入スペースが不足しないように、すべてのarticle_positionを更新する必要があります。ただし、これは、article_positionが変更されるたびではなく、計画されたメンテナンス間隔で実行できます。

于 2012-12-03T21:36:32.257 に答える
1

すべての記事の並べ替えを避けたい場合は、article_position に int 以外の別のデータ型を使用してみてください。タイムスタンプのようなものを使用してください。次に、順序付けクエリは、最新のタイムスタンプから古いものへの順序で記事を表示できます。1 つの記事を一番上に移動する必要がある場合は、新しいタイムスタンプをその article_position 要素に割り当てるだけです。これにより、元の例ですべての article_position 要素を並べ替えなければならないという問題が解決されるはずです。

于 2012-12-03T20:17:25.893 に答える