Ручное позиционирование изображений в галерее.

Dimush

Guest
Ручное позиционирование изображений в галерее.

Есть необходимость сделать возможность ручного позиционирования изображений в галерее.

Позиция элемента хранится в базе.
Хочу это сделать следующим образом:

PHP:
1. Около каждой картинки select
2. По субмиту в цикле проверка, если key != value,то key = old_position, value = new_position
	2.1. Если new_position > old_position
			те картинки, чья позиция > new_position ++
			присваиваем изменяемой картинке old_positon = new_position + 1
			те картинки, чья позиция > old_position --
	
	2.2. Если new_position < old_position
			те картинки, чья позиция >= new_position position ++
			присваиваем картинке с position = old_position + 1 = new_position
			те картинки, чья позиция > old_position + 1 position --
Насколько грамотен подобный алгоритм? Смущает необходимость выполнения большого количества запросов к базе данных. На самом деле эта функция будет очень редко использоваться, но все таки?

PHP:
function re_position($old_position, $new_position)
	{
	if ($old_position < $new_position)
		{
		mysql_query("update catalog set position = position + 1 where position > '$new_position'");
		mysql_query("update catalog set position = $new_position + 1 where position = '$old_position'");
		mysql_query("update catalog set position = position - 1 where  position > '$old_position'");
		};
	if ($old_position > $new_position)
		{
		mysql_query("update catalog set position = position + 1 where position >= $new_position");
		mysql_query("update catalog set position = $new_position where position = $old_position + 1");
		mysql_query("update catalog set position = position - 1 where position > $old_position + 1");
		}
	}

if (isset($_POST["Submit22"]))
	{
	$mas_keys = array_keys($_POST["pos"]);
	$mas_values = array_values($_POST["pos"]);
	for ($i=0; $i<count($_POST["pos"]); $i++)
		{
		if ($mas_keys["$i"] != $mas_values["$i"]) re_position($mas_keys["$i"], $mas_values["$i"]);
		};
	header("location: ?mod=$_GET[mod]&type=$_GET[type]&catalog=$_GET[catalog]&page=$_GET[page]");
	exit;
	};
 
Сверху