2013-05-05 93 views
1

我已經搜索和搜索,但無法找到我後,它可能是超級簡單。基於選擇的優先級增加或減少

我有一個表,它有一個優先級字段以顯示順序被選中。我希望能夠做到的,我已經看到,但不知道如何讓我的代碼做到這一點。

以優先級1,2,3,4,5,6取數據並將#5更改爲4並相應地調整所有其他數字。 所以現在它會是1,2,3,4(舊5),5(舊4),6。

我使用PHP,Mysql,由於某種原因,我沒有得到這個概念。我可以增加/減少數字,但我無法調整其他人。所以我最終以1,2,3,4,4,6

表結構 ID,貓,標題,優先 我只想增加/減少貓。我正在尋找一次排序多個,所以它可能是 1(舊5),2(舊3),3(舊6)...等

感謝您的幫助。

編輯

也許是我的第一個交代還沒有解釋不夠好。 比方說,我有10張照片,每張照片都有一個唯一的ID,現在給予的優先級與ID相同。我可以顯示圖像ORDER BY優先 ID 1,2,3,4,5,6,7,8,9,10 優先級1,2,3,4,5,6,7,8,9, 10

但看了圖片後,我想改變它們顯示的優先級。 SO ...我點擊一個箭頭,它有一個鏈接,告訴數據庫更新優先級爲4的圖片ID 4爲ID 4優先級2,因爲它更重要。

現在我的數據庫看起來像這樣。 ID 1,2,3,4,5,6,7,8,9,10 優先級1,2,2,3,5,6,7,8,9,10,因爲其餘的優先級數字沒有因爲我不知道如何完成這項工作,所以不會改變。

我想要做的是,將一個優先級更改爲新優先級後,重新排列數字,以便在數字之後按數字順序排列,因爲它們不重要。我該怎麼做呢?

+0

哪裏是你的代碼呢? (你已經嘗試過) – bestprogrammerintheworld 2013-05-05 18:26:36

+0

$ result = mysqli_query($ conn,「UPDATE photo_ptitle SET priority ='$ newpriority'WHERE id ='$ id'」)或die(mysqli_error($ conn)); 這隻會更新現有的身份證,而不會更新其他身份證。這是我絆倒和失敗的地方,無法弄清楚。 – clarnp49 2013-05-05 18:37:01

+0

跳過查詢的WHERE部分? – bestprogrammerintheworld 2013-05-05 18:51:00

回答

2

我希望這下面的代碼可以給你幫助SOM如何解決你的問題/挑戰:

<?php 
//Say that you've recieved array from db... 
$arr = array(); 
$arr[0] = array('id'=>5, 'sortOrder' => 1, 'picture' => 'picture1'); 
$arr[1] = array('id'=>6, 'sortOrder' => 2, 'picture' => 'picture2'); 
$arr[2] = array('id'=>7, 'sortOrder' => 3, 'picture' => 'picture3'); 
$arr[3] = array('id'=>9, 'sortOrder' => 4, 'picture' => 'picture4'); 
$arr[4] = array('id'=>10, 'sortOrder' => 5, 'picture' => 'picture5'); 


//Do some sorting... 

$executeSQL = down($arr,2); //Tell sortOrder to decrease for picture3 and to increase for picture2 
//Array will change to: 
//$arr[1] = array('id'>=6, 'sortOrder' => 3, 'picture' => 'picture2'); 
//$arr[2] = array('id'>=7, 'sortOrder' => 2, 'picture' => 'picture3'); 

//$executeSQL returns an array of two sql-statements that you should execute 


$executeSQL = up($arr, 1); //Decrease sortorder for picture2 and increase for picture3 
//Array will change to: 
//$arr[1] = array('id'=>6, 'sortOrder' => 2, 'picture' => 'picture2'); 
//$arr[2] = array('id'=>7, 'sortOrder' => 3, 'picture' => 'picture3'); 

//$executeSQL returns an array of two sql-statements that you should execute 


echo print_r($arr,true); //Will output the original array 

function down(Array &$arr, $index) { 
$origPrev = $arr[$index-1]['sortOrder'];  
$arr[$index-1]['sortOrder'] = $arr[$index]['sortOrder']; 
$arr[$index]['sortOrder'] = $origPrev; 
$sql = "UPDATE table SET sortOrder=" . $origPrev . " WHERE id=" . $arr[$index]['id']; 
$sql2 = "UPDATE table SET sortOrder=" . $arr[$index]['sortOrder'] . " WHERE id=" . $arr[$index-1]['id']; 
return array($sql, $sql2); 
} 

function up(Array &$arr, $index) { 
$origPrev = $arr[$index+1]['sortOrder'];  
$arr[$index+1]['sortOrder'] = $arr[$index]['sortOrder']; 
$arr[$index]['sortOrder'] = $origPrev; 
$sql = "UPDATE table SET sortOrder=" . $origPrev . " WHERE id=" . $arr[$index]['id']; 
$sql2 = "UPDATE table SET sortOrder=" . $arr[$index]['sortOrder'] . " WHERE id=" . $arr[$index+1]['id']; 
return array($sql, $sql2); 
} 

?> 
+0

謝謝。我有同樣的問題,這個想法解決了我的問題。 – Arfeen 2016-09-30 06:00:40

+1

這是非常有幫助的答案。非常感謝 – 2016-09-30 06:00:51