如果我有三个菜单Mysql的重新排序菜单
id | name | order
--------------------
1 | Foo | 1
2 | Bar | 2
3 | Blah | 3
并点击链接menu/up/1
,我需要与ID 2
设置菜单的顺序与ID 1
到2
和菜单1
。
我已经试过(PDO)
public static function goDown($id) {
if(!$id) {
return false;
}
self::connect();
self::prepare('SELECT count(*) FROM menu');
$count = self::fetch();
if(isset($count['count(*)'])) {
self::prepare('UPDATE menu SET order = order - 1 WHERE order = :count');
self::bindValue('count', $count['count(*)']);
self::execute();
self::prepare('UPDATE menu SET order = order + 1 WHERE id = :id AND order < :count');
self::bindValue('id', $id);
self::bindValue('count', $count['count(*)']);
return self::execute();
}
}
谢谢!
编辑 - 我的解决方案:
public static function goDown($id) {
if(!$id) {
return false;
}
self::connect();
self::prepare('SELECT count(*) FROM menu');
$count = self::fetch();
if(isset($count['count(*)'])) {
self::prepare('SELECT ordem FROM menu WHERE id = :id LIMIT 1');
self::bindValue('id', $id);
$ordem = self::fetch();
self::prepare('UPDATE menu SET ordem = ordem - 1 WHERE ordem = :ordem');
self::bindValue('ordem', $ordem['ordem'] + 1);
self::execute();
self::prepare('UPDATE menu SET ordem = ordem + 1 WHERE id = :id AND ordem < :count');
self::bindValue('id', $id);
self::bindValue('count', $count['count(*)']);
return self::execute();
}
}
谢谢,但我需要6查询,或不? – 2012-03-07 01:23:52