Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Обновление БД, как сделать через Квери Билдер!? Помогите:)
http://forum.kohanaframework.su/viewtopic.php?f=33&t=229
Страница 1 из 2

Автор:  pimpys [ 28 июн 2012, 13:47 ]
Заголовок сообщения:  Обновление БД, как сделать через Квери Билдер!? Помогите:)

Как мне через квери билдер сделать запрос такого вида:
Код:
"UPDATE $tbl_name SET pos = $pos_current + $pos_preview - pos WHERE pos IN ($pos_current, $pos_preview) $where"

Половину написал а половину не могу:( Вот что написал:
Код:
if(mysql_num_rows($query)){
         $pos_preview = mysql_result($query, 0);
         //Меняем местами текущую и предыдущую позиции
         $query = DB::update('system_photo_catalog')->set(array(
            'pos' => $pos_curent,//Вот как тут сделать +,- ну и всё такое?:(
            //TODO
         ));
      }

Помогите плиз, желательно с примером:)
Спасибо.

Автор:  qed [ 28 июн 2012, 18:44 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

Можно, например, так:
Код:
$query = DB::update('system_photo_catalog')
     ->set(array('pos' => DB::expr($pos_curent.' + '.$pos_preview.' - `pos`')))
     ->where('pos', 'IN', array($pos_current, $pos_preview));

Автор:  pimpys [ 29 июн 2012, 15:44 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

Спасибо, попробуем:)

Автор:  admin [ 29 июн 2012, 18:23 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

Для сложных запросов лучше писать их "чистыми", чем ломать голову :)
Ну или использовать DB::expr. Тогда код вставляется "как он есть".

Автор:  pimpys [ 29 июн 2012, 22:13 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

Помогите плиз еще с таким:
Код:
"SELECT MAX(pos) FROM system_photo_catalog";

Спасибо:)

Автор:  qed [ 30 июн 2012, 00:48 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

Код:
$query = DB::select(array('MAX(pos)', 'max_pos'))->from('system_photo_catalog');

Где первый элемент массива - сама функция, второй - алиас.

Автор:  pimpys [ 30 июн 2012, 00:57 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

qed писал(а):
Код:
$query = DB::select(array('MAX(pos)', 'max_pos'))->from('system_photo_catalog');

Где первый элемент массива - сама функция, второй - алиас.

Cпасибо, большое :)
UPDATE:

Запрос думает что это колонка:(
$query = DB::select(array('MAX(pos)', 'max_pos'))->from('system_photo_catalog');

Автор:  admin [ 30 июн 2012, 12:23 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

А если DB::expr поставить ?
Максимальное значение еще можно получить, сделав сортировку ордер бай и лимит 1 :)

Автор:  pimpys [ 30 июн 2012, 13:36 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

Cделал, так:
Код:
//Извлекаем текущую максимальную позицию
      $query = DB::select(DB::expr('MAX(pos)'))
            ->from('system_photo_catalog')
            ->execute();
      $position = mysql_result($query, 0) + 1;

Теперь ресурс не возвращает :(
Запара, execute(); делает mysql_result ппц....

Автор:  pimpys [ 30 июн 2012, 14:19 ]
Заголовок сообщения:  Re: Обновление БД, как сделать через Квери Билдер!? Помогите

Мог не заморачиватся, и вам не надоедать :)
Сделал всеравно по обычному:
Код:
$query = DB::expr('SELECT MAX(pos) FROM system_photo_catalog');
      $result = mysql_query($query);
      if(!$result)
         return FALSE;
      $position = mysql_result($result, 0) + 1;
      return $position;

Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/