Предложение заказа с предложением «как» в Zend DB - PullRequest
2 голосов
/ 19 августа 2011

Запрос:

select * from table_name ORDER BY name like 'C%' DESC;

Этот запрос прекрасно работает в MySql, но я не могу построить запрос с использованием Zend DB.Я получаю сообщение об ошибке при выполнении.

Код БД PHP:

$result = $this->getDefaultAdapter() ->select() ->from($this->_name,array('*')) ->order("name like 'C%' DESC") ->query() ->fetchAll();

Ошибка:

Column not found: 1054 Unknown column 'name like 'C%'' in 'order clause' 

Заранее спасибо

Ответы [ 2 ]

6 голосов
/ 19 августа 2011

Zend_Db_Select пытается разделить строки как имена столбцов, но пропускает это, если вы передаете объект типа Zend_Db_Expr вместо строки:

->order(new Zend_Db_Expr("name like 'C%' DESC"))->

Существует также недокументированное сокращение: функция разделения столбцов предполагает, что любая строка, содержащая скобки, скорее всего, будет выражением, а не просто именем столбца. Таким образом, будет работать следующее:

->order( "(name like 'C%' DESC)" )->
2 голосов
/ 19 августа 2011

Я не знаком с Zend, но попробуйте переписать ваш SQL-запрос в Zend, как это

select *, (`name` like 'C%') as theFiled from  table_name by theFiled desc;

Хотя я не настолько уверен, что думаю, что Zend-код должен быть примерно таким,

 $result = $this->getDefaultAdapter() ->select() 
->from($this->_name,array('*', "theFiled" => "name like 'C%'") ->order("theFiled DESC") 
->query() ->fetchAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...