我正在创建一个充当优先级列表的Web应用程序,允许用户重新排列列表中的一组项目,并通过PHP后端将该排列存储在MySQL数据库中。
现在,当用户完成项目的排列并保存配置后,我会为每一行调用一个单独的更新语句,为每一行插入优先级(列表中的位置)。
例如:(不是我的生产代码,但这说明了这一点)
<?php
$items = array(12, 17, 27, 26, 5); // an array of IDs, in proper order
// due to nature of foreach loop in PHP, this makes $order be the key value,
// in this case, 0, 1, 2, 3, 4 respectively
foreach ($items as $order => $item)
{
$database->query("UPDATE `table` SET `priorityLevel` = {$order} " .
"WHERE `ID` = {$item}");
}
?>
这已经足够好用了,但运行这么多更新查询似乎效率低下,尤其是当列表变长并且我们要订购许多项目时。我希望有某种方法可以在update命令中动态创建订单,如下所示:
<?php
$database->query("UPDATE `table` SET `priorityLevel` = ORDER_NUMBER " .
"WHERE `ID` IN (12, 17, 27, 26, 5)");
?>
…where order_number是一个动态数字,可能由where子句中id值的位置决定。它需要尊重WHERE子句中项目的顺序,并确保优先级是根据用户的意愿设置的。
有人知道在mysql 5/php 5环境中是否可以这样做吗?该表正在使用myisam引擎,因此它不支持事务。
(ps-我对MySQL的一些基本知识已经很了解了,但是我还不是一个专家,所以如果除了简单的创建、插入、更新、删除命令之外,这里还涉及到什么,请描述一下)
(PPS-这个主题对谷歌来说很难,因为这些术语太笼统了。如果我搜索“mysql订单”,我会得到一系列关于为mysql创建购物车应用程序的教程!)