2010-05-25 82 views
2
| id | url | title | menu_id | 
------+--------+--------+---------- 
| 1 | http://| link 1 | 1  | 
| 2 | http://| link 2 | 2  | 
| 3 | http://| link 3 | 3  | 
| 4 | http://| link 4 | 4  | 

嗨,我想知道是否有可能使用PHP重新排序上面的東西像下面。我正在嘗試生成一個菜單,通過點擊向上或向下箭頭可輕鬆進行重新排序。我不知道從哪裏開始。任何幫助將非常感激。使用PHP重新排序mysql行

| id | url | title | menu_id | 
------+--------+--------+---------- 
| 1 | http://| link 1 | 2  | 
| 2 | http://| link 2 | 4  | 
| 3 | http://| link 3 | 3  | 
| 4 | http://| link 4 | 1  | 
+0

PHP?不妨使用Javascript,而不是每次處理頁面刷新時想要分類的東西...... – 2010-05-25 22:14:57

回答

4

我就用下面的代碼

$menu_id = $_GET['page_id']; 
$page_order = $_GET['page_order']; 
if ($_GET['do'] == 'up') { 


mysql_query("UPDATE menu SET menu_order = '$page_order' +1 WHERE id != '$menu_id' AND menu_order < '$page_order'"); 
mysql_query("UPDATE menu SET menu_order = menu_order -1 WHERE id = '$menu_id'");  


} else if ($_GET['do'] == 'down') { 

mysql_query("UPDATE menu SET menu_order = '$page_order' -1 WHERE id != '$menu_id'"); 
mysql_query("UPDATE menu SET menu_order = menu_order +1 WHERE id = '$menu_id'");  


} 
2

這絕對有可能,但你必須做一點額外的邏輯,這不是一個可以在一個查詢中完成的事情。

想想點擊向上/向下箭頭時的步驟。例如,假設您以1,2,3,4的順序開始項目,然後單擊#3上的向上箭頭。有兩件事情要發生的順序更改爲1,3,2,4:2(它被減1)

  • 2的位置改變到3(它得到

    • 3的位置變化增加1)

    所以,你必須改變位置的項目,他們點擊了上以及一個是以前在新的位置。點擊向下箭頭幾乎是一樣的,但是增加/減少的方向相反。

  • 1

    我有同樣的問題,並與if語句查詢解決它。這裏是一步一步的說明: 1. 在更新mysql之前獲取該項目的位置。

    $query = "SELECT * FROM table WHERE id=1; 
    $result = mysql_query($query); 
    $item = mysql_fetch_array($result); 
    
    $old_position = $item["position"]; 
    

    我們在頁面中有一個表單,所以我們從$ _POST數據中獲得新的位置。

    $new_position = $_POST["position"]; 
    
    
    we determine if we moved the item up or down 
    
    if ($new_position > $old_position) { //moved it down 
    $query = "UPDATE table SET position = position-1 WHERE position >= {$old_pozisyon} AND position <= {$new_pozisyon} and id <> {$id}"; 
    
    } 
    

    我們對其他情況也是這樣,但是這次我們做了+1。希望這可以幫助

    -1

    理想情況下,您應該使用SQL查詢解決此問題,而不是使用PHP對行進行排序。但是如果你需要在PHP中由於某種原因進行排序,請使用array_multisort()

    你應該首先創建一個數組,其中每個數組的項是查詢中的一行mysql數據。然後使用array_multisort()PHP函數根據要排序的字段對行進行排序。見本頁實例3的實現細節: http://php.net/manual/en/function.array-multisort.php