PHP kullanarak yeniden sipariş mysql satır

4 Cevap php
| 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       |

Olası PHP kullanarak aşağıdaki gibi bir şey için yukarıdaki yeniden düzenlemek eğer Merhaba, ben merak ediyorum. Ben kolay bir yukarı veya aşağı oku tıklayarak reordered edilebilir bir menü oluşturmak için çalışıyorum. Ben nereden başlamak için hiçbir fikrim yok. Herhangi bir yardım çok takdir.

| 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       |

4 Cevap

Ben aşağıdaki kodu kullanarak gitti

$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'");    


} 

Bu kesinlikle mümkün, ama bunu tek sorguda yapılabilir bir şey değil, ekstra bir mantık biraz yapmak zorunda.

Eğer bir yukarı / aşağı oku tıklatın adımlar düşünün. Örneğin, sen sırayla 1 öğeler, 2, 3, 4 ile başlar ve daha sonra # 3 yukarı okunu tıklatın diyelim. İki şey, 1, 3, 2, 4 sırasını değiştirmek için gerçekleşmesi gerekir:

  • # 3 pozisyonu (o 1 azalarak alır) 2 değiştirir
  • # 2 pozisyonu (o 1 ile artmış olur) 3 değiştirir

Yani onlar yeni konumunda önce idi, as well as birinin üzerine tıklandığında o öğenin konumunu değiştirmek zorunda. Bir aşağı oku tıklayarak, ama tam tersine artış / azalış ile, hemen hemen aynıdır.

I had the same problem, and solved it with an if statement query. Here is step by step instructions: 1. get the position of the item before updating mysql.

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

$old_position = $item["position"];

biz $ _POST veri itibaren yeni bir pozisyon almak yüzden sayfasında bir formu vardı.

$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}";

}

ve biz diğer durum için aynı şeyi ama pozisyonu +1 bu sefer yapmak. Umarım bu yardımcı olur

İdeal, yerine kendi satırları sıralamak için PHP kullanarak daha SQL sorgusu ile bu sorunu çözmek gerekir. Ama, nedense PHP içinde sıralama yapmak array_multisort kullanmak () gerekiyorsa

You should first create an array with each item of the array being a mysql row from your query. Then use the array_multisort() PHP function to sort the rows by the field that you want to sort by. See example 3 on this page for a implementation details: http://php.net/manual/en/function.array-multisort.php