我需要做的是: - 刪除從表formfields
一個入口 - 更新與排序各個領域>(已刪除字段的順序) - 設置更新的字段的順序,以當前值減1(例如,如果字段上的當前排序是8,那麼它應該被設置爲7)。更新mysql表。一個字段= OLD_VALUE - 1
這是可能的一個查詢?或者我怎麼能做到這一點?
我需要做的是: - 刪除從表formfields
一個入口 - 更新與排序各個領域>(已刪除字段的順序) - 設置更新的字段的順序,以當前值減1(例如,如果字段上的當前排序是8,那麼它應該被設置爲7)。更新mysql表。一個字段= OLD_VALUE - 1
這是可能的一個查詢?或者我怎麼能做到這一點?
您可以設置一個事務以便一次完成。
如下表:
CREATE TABLE `formfields` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(25) NOT NULL,
`order_no` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
你可以做類似如下:
START TRANSACTION;
DELETE FROM formfields WHERE order_no = {YOUR_NUM};
UPDATE formfields SET order_no = order_no - 1 WHERE order_no > {YOUR_NUM};
COMMIT;
你顯然不能做DELETE
,並在同一個查詢中UPDATE
,但你可以使用InnoDB,啓動一個事務,運行刪除查詢,然後使用更新查詢,如...
UPDATE formfields SET field_value = field_value - 1
WHERE field_value >= <VALUE YOU'VE JUST DELETED>
...在提交交易之前。
使用MyISAM表格連續執行兩個查詢將在十個工作中有九個工作(取決於負載等),但您確實不應該去那裏。