Предложение заказа с предложением "как" в Zend DB

Запрос:

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();

Ошибка:

Столбец не найден: 1054 Неизвестный столбец 'name like 'C%'' в 'order order' 

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

2 ответа

Решение

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

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

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

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

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

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

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

 $result = $this->getDefaultAdapter() ->select() 
->from($this->_name,array('*', "theFiled" => "name like 'C%'") ->order("theFiled DESC") 
->query() ->fetchAll();
Другие вопросы по тегам