使用PHP更新mysql行的最佳策略?

时间:2012-05-02 08:48:04

标签: php mysql

说我有idcatnameorder字段的5行:

+----+----------+-----+  
| id | catname  |order|
+----+----------+-----+  
|  1 | cat1     |   2 |
|  2 | cat2     |   1 |
|  3 | cat3     |   3 | 
|  4 | cat4     |   5 |
|  5 | cat5     |   4 |
+----+----------+-----+  

我希望从数组中更新这5个类别的顺序,例如:

array(1 => 3, 2 => 4, 3 => 5, 4 => 1, 5 => 2)

最佳做法是什么?要选择每一行并更新订单字段及其在数组中的相应顺序?或者创建一个包含所有这些类别的订单数组的新表,并使用它来对两个表进行排序并使用例如userid的连接语句进行链接?

3 个答案:

答案 0 :(得分:2)

如果要在一个查询中执行此操作,可以按如下方式生成SQL查询(假设键是现有的order值):

$orders = array(
    1 => 3,
    2 => 4,
    3 => 5,
    4 => 1,
    5 => 2,
);

$sql = 'UPDATE category SET order = CASE order ';

foreach ($orders as $old => $new) {
    $sql .= "WHEN $old THEN $new ";
}

$sql .= 'END';

如果密钥是id条目,请使用CASE id代替CASE order

答案 1 :(得分:1)

您可以使用新订单为它们分配负值,然后将负值乘以-1。

array(1->-3,2->-4,3->-3,4->-1,5->-2)

但是你必须通过循环遍历数组来更新每个行:

update yourTable set order=-3 where order=1;

后来使用

update yourTable set order=-1*order where order < 0;

答案 2 :(得分:0)

无论如何,将订单数据放入您将要选择/提取的行中肯定会比具有不同表的连接更快。在更新方面,如果您拥有良好的索引,则无关紧要。所以,我会采用一种表格方法。