Как я могу изменить порядок отображения?

У меня есть форма, и на этой форме пользователь может изменить порядок отображения. Это отражено на странице, которая показывает всех наших сотрудников, и мы хотим иметь возможность контролировать, в каком порядке они появляются.

введите описание изображения здесь

Когда форма отправлена, я хочу изменить другие порядки отображения в базе данных, чтобы отразить это изменение.

Некоторые примеры данных:

введите описание изображения здесь

Когда они сохраняют эту форму, все обновляется до БД, кроме порядка отображения. Это обрабатывается в отдельном вызове функции.

function updateDisplayOrder($eid, $display_order_old, $display_order)
{
if ($eid > 0)
{
if ($display_order != $display_order_old)
{
$result = db_query("SELECT * FROM {help_employees} WHERE active = 1 ORDER BY display_order");
while ($arr = db_fetch_array($result))
{
if ($display_order > $display_order_old)
{
if ($arr["display_order"] > $display_order_old && $arr["display_order"] <= $display_order)
{
db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d", array($arr["display_order"] - 1, $arr["eid"]));
}
}
else
{
if ($arr["display_order"] < $display_order_old && $arr["display_order"] >= $display_order)
{
db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d", array($arr["display_order"] + 1, $arr["eid"]));
}
}
}
db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d", $display_order, $eid);
}
}

}

Что происходит сейчас:

0

Решение

удалить ваш элемент из его текущей позиции

 db_query("UPDATE {help_employees}
SET display_order = display_order - 1
WHERE eid != %d AND active = 1 AND  display_order > %d",
$eid,  $display_order_old);

добавить место для своей новой позиции

 db_query("UPDATE {help_employees}
SET display_order = display_order + 1
WHERE eid != %d AND active = 1 AND  display_order >= %d",
$eid,  $display_order);

изменить это:

 db_query("UPDATE {help_employees} SET display_order = %d WHERE eid = %d ",
$display_order, $eid);
0

Другие решения

При вставке нового сотрудника:

db_query("UPDATE {help_employees} SET display_order = display_order + 1 WHERE display_order >= :display_order", $display_order);

Иначе, если $ display_order> $ display_order_old

db_query("UPDATE {help_employees} SET display_order = display_order + 1 WHERE display_order >= :display_order AND id <> :id", $display_order, $id)`;

еще

db_query("UPDATE {help_employees} SET display_order = display_order + 1 WHERE display_order >= :display_order AND display_order < :display_order_old AND id <> :id", $display_order, $display_order_old, $id);

Где $ display_order_old, $ display_order и $ id являются значениями текущего измененного сотрудника

0

По вопросам рекламы [email protected]