1

次のコードがあるとします。

$ids = execute_query("SELECT id FROM table WHERE field = 'value' ORDER BY order_field");
$query = "UPDATE table SET increment = CASE";
for ($i = 0; $i <= sizeof($ids); $i++) {
  $query .= " WHEN id = " . $ids[$i] . " THEN " . $i;
}
$query .= " END WHERE field = 'value'";

次に、そのクエリを実行します。

SELECTandを組み合わせてUPDATE、まったく同じことを効率的に達成する単一のクエリにする方法はありますか?

4

3 に答える 3

1

同じテーブルをサブ選択することはできませんが、テーブルを更新してください: http://dev.mysql.com/doc/refman/5.6/en/update.html サブクエリ。」

私はここでこれを実行しませんでしたが、私が理解したことから、これはあなたが望むものです:

SET @ordering = 0;

UPDATE
  table SET increment = (@ordering := @ordering + 1)
WHERE
  field = 'value'
ORDER BY
  order_field;

データベースに再接続しない限り、 SETandを別々のクエリで実行できます。UPDATE

于 2013-04-03T16:01:22.520 に答える
0
SET @ordering = 100000;

UPDATE candidate 
    SET regno = (@ordering := @ordering + 1)
    WHERE 
        year = 2014 AND 
        confirm = 1 AND
        e_stat = 1 
    ORDER BY centre_code, `name`;
于 2014-05-01T16:22:54.650 に答える
0

これはあなたが望むことをするかもしれません:

update table
    set increment = (select cnt
                     from (select count(*) as cnt
                           from table t
                           where field = 'value' and t.id <= table.id
                          ) a
                    )
    where field = 'value';
于 2013-04-03T15:48:16.967 に答える