|
|
|
| Есть таблица - в ней есть поле SORT числовое, данные из таблицы выводятся как ORDER BY SORT.
На странице есть 2 кнопки "выше" и "ниже" то бишь операции над меню - менять местами текущий элемент и ( либо вышестоящий или нижестоящий, зависит от кнопки что нажали повысить или понизить )
Каким образом это сделать ? | |
|
|
|
|
|
|
|
для: mabelrod
(14.04.2011 в 12:22)
| | Первичный ключ у таблицы есть? | |
|
|
|
|
|
|
|
для: cheops
(14.04.2011 в 12:26)
| | да - ID то есть допустим есть всего 3 поля:
ID, SORT, CONTENT | |
|
|
|
|
|
|
|
для: mabelrod
(15.04.2011 в 00:48)
| | Возможно вам пригодятся следующие две функции
<?php
// Подъём блока на одну позицию вверх
function up($id_position, $tbl_name)
{
// Извлекаем текущую позицию
$query = "SELECT SORT FROM $tbl_name
WHERE ID = $id_position
LIMIT 1";
$pos = mysql_query($query);
if(!$pos) exit("Ошибка - ".mysql_error());
if(mysql_num_rows($pos))
{
$pos_current = mysql_result($pos, 0);
}
// Извлекаем предыдую позицию
$query = "SELECT pos FROM $tbl_name
WHERE SORT < $pos_current
ORDER BY SORT DESC
LIMIT 1";
$pos = mysql_query($query);
if(!$pos) exit("Ошибка - ".mysql_error());
if(mysql_num_rows($pos))
{
$pos_preview = mysql_result($pos, 0);
// Меняем местами текущую и предыдущую позиции
$query = "UPDATE $tbl_name
SET SORT = $pos_current + $pos_preview - pos
WHERE SORT IN ($pos_current, $pos_preview)";
mysql_query($query);
}
}
// Опускание блока на одну позицию вниз
function down($id_position, $tbl_name)
{
// Извлекаем текущую позицию
$query = "SELECT SORT FROM $tbl_name
WHERE ID = $id_position
LIMIT 1";
$pos = mysql_query($query);
if(!$pos) exit("Ошибка - ".mysql_error());
if(mysql_num_rows($pos))
{
$pos_current = mysql_result($pos, 0);
}
// Извлекаем следующую позицию
$query = "SELECT SORT FROM $tbl_name
WHERE SORT > $pos_current
ORDER BY SORT
LIMIT 1";
$pos = mysql_query($query);
if(!$pos) exit("Ошибка - ".mysql_error());
if(mysql_num_rows($pos))
{
$pos_next = mysql_result($pos, 0);
// Меняем местами текущую и следующую позиции
$query = "UPDATE $tbl_name
SET SORT = $pos_next + $pos_current - pos
WHERE SORT IN ($pos_next, $pos_current)";
mysql_query($query);
}
}
?>
| Первая функция поднимает позицию на единицу, а вторая - опускает. Первый параметр - первичный ключ изменяемой позиции, второй параметр - название таблицы. | |
|
|
|