1

私の脳は今朝、働くのをやめることにしました。別の列による並べ替えに基づいて、テーブルの「display_order」列をバッチ更新できる MySQL および SQLite 互換クエリが必要です。

たとえば、次のフィールドがあるとします: display_order、first_name、last_name、date_created。「last_name で並べ替えて、display_order を順次に更新する」と言いたいです。

参考までに、データベースはこれらのフィールドよりもはるかに複雑であり、設計が不十分であるため、その場で複雑な並べ替えを行うには数十年かかります。とは言っても、直接的な「SELECT * FROM tbl ORDER BY display_order」が機能するように、特定のレポート、トランザクションなどの順序でデータを事前に取得する必要があります。

一番。

4

2 に答える 2

2

テーブルのタイトルの並べ替えでシーケンス列を更新したいときに私がしたことは次のとおりです。(通常、並べ替え順序はシリーズ内の実際の位置によって固定されますが、さまざまな 1 回限りのトークの「所有者」セットは、タイトルで並べ替える必要があり、新しいトークが追加されるたびに更新する必要があります)。

UPDATE resource r
JOIN(
SELECT
    resource.resource_key AS rkey,
    @curRow := @curRow + 1 AS row_number
FROM
    resource,
    (SELECT @curRow := 0) rtemp
WHERE
    grouping_key = 'MMMISC'
ORDER BY
    resource.title
) c ON r.resource_key = c.rkey
SET r.group_sequence = c.row_number

答えを刺激するためのこれこれへの帽子のヒント...

PS SQLiteで機能するかどうかはわかりませんが、MySQLでは機能します...

于 2012-12-31T15:32:17.933 に答える
0

これがうまくいくかどうかはわかりません。AUTO_INCREMENT 列「ID」を含む一時テーブルを your_table と同様の他の列と共に作成し、「select * from your_table order by last_name」の結果を含む一時テーブルを挿入します。次に、your_table.display_order 列を temp.ID で更新します。ここで、your_table.last_name = temp.last_name です。

于 2011-05-26T17:40:34.133 に答える