2011-07-18 25 views
3

我有一个表sites,基本上是一个旅行推销员问题。我的老板想要从列表中选择一堆网站,然后手动将它们排序为访问顺序。我已经寻找similarquestions,但他们不是针对MySQL,而这些thatwere没有提供一个合理的解决方案,我的情况。我在大学时没有做过计算机科学,所以希望这对你们中的一些人来说是一种面包和黄油的东西。更新一系列行

我愿做类似下面的伪代码:

UPDATE sites SET run_order=0 WHERE selected='false'; 
UPDATE sites SET run_order=AUTO_SEQUENCE(DESC FROM 6) WHERE site_id=SEQUENCE(23,17,9,44,2,14); 

那些后者将具有同样的效果:

UPDATE sites SET run_order=6 WHERE site_id=23; 
UPDATE sites SET run_order=5 WHERE site_id=17; 
UPDATE sites SET run_order=4 WHERE site_id=9; 
UPDATE sites SET run_order=3 WHERE site_id=44; 
UPDATE sites SET run_order=2 WHERE site_id=2; 
UPDATE sites SET run_order=1 WHERE site_id=14; 

因为我通过PHP运行此,我尽管我的老板在一天中可以访问的网站数量当然受到内燃机的限制,但不想发布许多个人查询。
我的SQL表看起来像这样:

+---------------+----------------------+------+-----+---------+----------------+ 
| Field   | Type     | Null | Key | Default | Extra   | 
+---------------+----------------------+------+-----+---------+----------------+ 
| site_id  | int(10) unsigned  | NO | PRI | NULL | auto_increment | 
| ...   |      |  |  |   |    | 
| selected  | enum('false','true') | NO |  | false |    | 
| run_order  | int(10) unsigned  | NO |  | 0  |    | 
+---------------+----------------------+------+-----+---------+----------------+ 
+0

哪些错误与[这个答案](http://stackoverflow.com/questions/3882388/updating-multiple-rows-with-different-values)?这是针对MySQL并且只有一个声明。 – Jacob

+0

该页面上接受的答案是'CASE WHEN ... THEN ...'语法适用于我,但不是自动的。我将不得不计算PHP循环中的每个THEN值,而不是该服务器的MySQL服务器。我正在寻找更简洁的语法。 –

回答

0
+0

感谢马特,但那不是自动的,并且似乎与我在自己的问题中链接到的第一个问题相同。 –

+0

阅读到最后,不同之处在于它们展示了如何使用php来生成单个sql语句来执行所有更新。我能想到的另一种方法是创建一个临时表并加入更新中,但这种方式似乎更简单,因此更好。 – Matt