2016-04-13 3 views
1

Я использую QueryBuilder для Phalcon для создания запроса, возвращающего объекты полной модели. Мне нужно заказать запрос по столбцу «семестр» в хронологическом порядке. Проблема заключается в содержании столбца: «F», «W», «G», «S», который является порядком, в котором мне нужны значения, подлежащие сортировке. Таким образом, сначала все строки с «F», W "и т. Д.Как заказать запрос по столбцу не в алфавитном порядке

Сначала я попытался заказать функцию MySQL FIELD(), но я получал исключения синтаксического анализа, поэтому я не думаю, что PDO поддерживает его. Я не мог найти документацию так или иначе.

Затем я попытался использовать метод QueryBuilder , но это переименовало все мои столбцы и вызвало тип возвращаемого объекта не как объекты модели.

Отбрасывание QueryBuilder и использование только сырых SQL-запросов - это не вариант, который я собираюсь рассмотреть - у меня сложная структура, построенная вокруг QueryBuilder, и для перезаписи потребуется слишком много работы.

Моей последней попыткой будет просто изменить, как «семестр» хранится в базе данных, а «F» - 0, «W» - 1 и т. Д. Я бы предпочел не изменять данные, если я могу получить это работать в коде.

Любые идеи?

ответ

2

Вы можете попробовать эту строку с функцией orderBy:

"CASE 
WHEN Semester = 'F' THEN 0 
WHEN Semester = 'W' THEN 1 
WHEN Semester = 'G' THEN 2 
ELSE 3 
END" 
+0

Это довольно близко к работе. Этот формат был причиной исключения, поэтому я изменил его на другой формат корпуса: ПРИМЕР семестре КОГДА «W» ТОГДА 1 КОГДА «G», затем 2 КОГДА «S» ТОГДА 3 КОГДА «F» ТОГДА 4 КОНЕЦ – Pickle

1

Вы могли бы попытаться присоединиться с определенным пользователем выбрать, как этот

SELECT * 
FROM yourtable 
INNER JOIN 
(SELECT 'F' as code,0 as sequence 
UNION 
SELECT 'W' as code,1 as sequence 
UNION 
SELECT 'G' as code,2 as sequence 
UNION 
SELECT 'S' as code,3 as sequence) 
as T ON T.code = yourtable.column 
ORDER BY T.sequence ASC 

или вы можете использовать функцию FIND_IN_SET(), чтобы определить ваш заказ как этого

SELECT 
    *, 
    FIND_IN_SET(code,'F,W,G,S') as sequence 
FROM semester 
ORDER BY sequence ASC 
+0

Спасибо. Я уже видел эту форму запроса, исследуя эту тему. Тем не менее, я специально использую QueryBuilder Phalcon, который не позволит эту структуру запроса. Спасибо, в любом случае. – Pickle

+0

Можете ли вы построить запрос второго (внизу моего ответа) в QueryBuilder Phalcon? –

+0

Спасибо за помощь. Однако я пошел с ответом @ PaulF. – Pickle

Смежные вопросы