10/10/2018, 00:02
Giúp mình cách làm này các bạn ơi
Khi mình lấy tất cả các record trong CSDL lên (ODER By oder ASC). Trong table mình có 1 cột order. Ngụ ý của mình là dùng cột order này để sắp xếp các record. Trong mỗi record mình có 2 link (Đi lên và đi xuống). Mình muốn rằng khi click vào link "Đi lên", record đó sẽ dời lên trên và chuyển record nằm liền trên xuống dưới.
Phương pháp đầu tiên của mình là set order giống với id, để khi mình click link "Đi lên", sẽ set order của record đó giảm 1 và đổi order của record trên nó thành order của nó (tức là đổi 2 order cho nhau). Nhưng mình thấy không ổn, vì chẳng hạn mình có 10 record, mình xóa record thứ 3 đến thứ 6, khi đó order còn lại là 1, 2, 7, 8, 9, 10. Vậy nếu mình muốn đem record có id thứ 7 lên thì .....pó tay. Vì nếu giảm record id thứ 7(có order là 7), tức là mình giảm 1 chỉ còn 6, còn record thứ 2 tăng lên 1 cũng chỉ là 3, khi đó 2 record vẫn chưa đổi trật tự. Các bạn có ai giúp mình cách nào để thay đổi trật tự 2 record 1 cách hoàn hảo k ?
Code của mình
if($up)
{
$sel_up = mysql_query("SELECT * FROM $tb_category ORDER BY id ASC");
$row_up = mysql_fetch_array($sel_up);
$order = $row_up[order] - 1 ;
mysql_query("UPDATE $tb_category SET order='$order' WHERE id = '$up'");
mysql_query("UPDATE $tb_category SET order = '$cate[order]' WHERE id = '".$up-1."'");
}
Phương pháp đầu tiên của mình là set order giống với id, để khi mình click link "Đi lên", sẽ set order của record đó giảm 1 và đổi order của record trên nó thành order của nó (tức là đổi 2 order cho nhau). Nhưng mình thấy không ổn, vì chẳng hạn mình có 10 record, mình xóa record thứ 3 đến thứ 6, khi đó order còn lại là 1, 2, 7, 8, 9, 10. Vậy nếu mình muốn đem record có id thứ 7 lên thì .....pó tay. Vì nếu giảm record id thứ 7(có order là 7), tức là mình giảm 1 chỉ còn 6, còn record thứ 2 tăng lên 1 cũng chỉ là 3, khi đó 2 record vẫn chưa đổi trật tự. Các bạn có ai giúp mình cách nào để thay đổi trật tự 2 record 1 cách hoàn hảo k ?
Code của mình
if($up)
{
$sel_up = mysql_query("SELECT * FROM $tb_category ORDER BY id ASC");
$row_up = mysql_fetch_array($sel_up);
$order = $row_up[order] - 1 ;
mysql_query("UPDATE $tb_category SET order='$order' WHERE id = '$up'");
mysql_query("UPDATE $tb_category SET order = '$cate[order]' WHERE id = '".$up-1."'");
}
Bài liên quan
cách 2: khi up or down thì:
a. tìm order của record phía trên hoặc phía dưới của record hiện tại
b. hóan đổi giá trị order của 2 record trên
Cách 2: tìm record liền trên và liền dưới, như vậy phải cho nó vào aray phải k ?. Mình chỉ hình dung dc như vậy, chứ chưa biết viết thế nào ? Nếu 3do biết thì demo dùm mình 2 cách luon dc k ?
ví dụ xóa 1 record có order là 5.
Lệnh để cập nhật là:
update tableabc set `order` = `order` -1 where `order` > 5
cách 2:
giả sử cần down, order của record hiện tại là 5.
Tìm order kế tiếp bên dưới:
select id, order from tableabc where `order` > 5 order by `order` asc limit 1
hoán đổi
update tableabc set order = $nextorder where id = $currentId
update tableabc set order = $currentorder where id = $nextId
trong đó $nextorder là order kế bên dưới, $nextId là id tương ứng. $currentId là id của record hiện tại, $currentOrder = 5 al2 order của record hiện tại
Mình tên Danh, 24t, đang học ở Aptech Hoàng Văn Thụ Tp HCM