2011-07-18 51 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