|
|
|
| В проекте используются функции подъема и опускания строки на одну позицию. Вот ее код:
// Подключиться к базе данных
$handle = db_connect();
// Извлекаем текущую позицию
$query = "SELECT pos FROM $tbl_name
WHERE $fld_name = $id_position
LIMIT 1";
$result = $handle->query($query);
if(!$result)
{
throw new ExceptionMySQL(mysqli_error(),
$query,
"Ошибка при извлечении
текущей позиции");
}
if($result->num_rows)
{
$post=$result->fetch_array();
echo $pos_current = $post[0]; //Извлечение прошло нормально
}
// Извлекаем следующую позицию
$query = "SELECT pos FROM $tbl_name
WHERE pos > $pos_current $where
ORDER BY pos
LIMIT 1";
$result = $handle->query($query);
if(!$result)
{
throw new ExceptionMySQL(mysqli_error(),
$query,
"Ошибка при извлечении
следующей позиции");
}
if($result->num_rows)
{
$post=$result->fetch_array();
echo $pos_next = $post[0]; //извлечения нет
// Меняем местами текущую и следующую позиции
$query = "UPDATE $tbl_name
SET pos = $pos_next + $pos_current - pos
WHERE pos IN ($pos_next, $pos_current) $where";
$result = $handle->query($query);
if(!$result)
{
throw new ExceptionMySQL(mysqli_error(),
$query,
"Ошибка изменения
позиции");
}
}
|
Почему не извлекается позиция при втором извлечении?
// Извлекаем следующую позицию
$query = "SELECT pos FROM $tbl_name
WHERE pos > $pos_current $where
ORDER BY pos
LIMIT 1";
$result = $handle->query($query);
if(!$result)
{
throw new ExceptionMySQL(mysqli_error(),
$query,
"Ошибка при извлечении
следующей позиции");
}
if($result->num_rows)
{
$post=$result->fetch_array();
echo $pos_next = $post[0]; //извлечения нет
|
В других разделах она работает нормально. | |
|
|
|
|
|
|
|
для: sevidi
(13.08.2014 в 18:46)
| |
// Извлекаем следующую позицию
$query = "SELECT pos FROM $tbl_name
WHERE pos > $pos_current $where
ORDER BY pos
LIMIT 1";
|
для того что бы проверить запрос передаваемый серверу MySQL, достаточног сделаь эхо
echo $query = "SELECT pos FROM $tbl_name
WHERE pos > $pos_current $where
ORDER BY pos
LIMIT 1";
|
судя по всему у вас $where лишнее прицепилось (во всяком случае в первом запросе его нет), либо что-то другое некорректно
___
сам алгоримт решения задачи на тройку с огромным минусом, даже ближе к двойке...
если вам необходимо передвинуть на 376 позиций вниз, это вы запустите цикл на 376 итераций? | |
|
|
|