Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка данных из БД
 
 автор: sevidi   (13.08.2014 в 18:46)   письмо автору
 
 

В проекте используются функции подъема и опускания строки на одну позицию. Вот ее код:
  // Подключиться к базе данных 
    $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]; //извлечения нет

В других разделах она работает нормально.

  Ответить  
 
 автор: Valick   (13.08.2014 в 20:48)   письмо автору
 
   для: 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 итераций?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования