У меня есть форма, и на этой форме пользователь может изменить порядок отображения. Это отражено на странице, которая показывает всех наших сотрудников, и мы хотим иметь возможность контролировать, в каком порядке они появляются.
Когда форма отправлена, я хочу изменить другие порядки отображения в базе данных, чтобы отразить это изменение.
Некоторые примеры данных:
Когда они сохраняют эту форму, все обновляется до БД, кроме порядка отображения. Это обрабатывается в отдельном вызове функции.
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);
}
}
}
Что происходит сейчас:
удалить ваш элемент из его текущей позиции
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);
При вставке нового сотрудника:
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 являются значениями текущего измененного сотрудника