The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как организовать сортировку по полю выбираемому через IF"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (MySQL)
Изначальное сообщение [ Отслеживать ]

"Как организовать сортировку по полю выбираемому через IF"  +/
Сообщение от G.NercY.uR on 04-Сен-13, 17:04 
Добрый день!
У меня такой запрос:
==================================================
SELECT  aa.id, bb.sortField
FROM    xxx AS aa
JOIN   ( SELECT  aa.fID AS id, IF(aa.isInt,aa.intData,aa.stringData) AS sortField
         FROM    yyy AS aa
       ) AS bb ON bb.id=aa.id
ORDER BY bb.sortField
==================================================
т.е. тут второй столбец в выборке является переменным.
Но в реальном запросе, все строки имеют этот столбец только одного типа (т.е. в результате реального запроса, в зависимости от переданного параметра sortField для всех строк либо intData, либо stringData
но сортировка в таком случае как сортировка строк. Пробовал вместо конструкции IF(aa.isInt,aa.intData,aa.stringData) написать aa.intData тогда всё сортирует верно.

Я так понимаю проблема в том, что MySQL не знает какой тип у данного столбца, потому что он может быть разным для разных строк, но можно ли ему как то принудительно указать его?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как организовать сортировку по полю выбираемому через IF"  +/
Сообщение от PavelR (ok) on 04-Сен-13, 17:35 
>[оверквотинг удален]
> ==================================================
> т.е. тут второй столбец в выборке является переменным.
> Но в реальном запросе, все строки имеют этот столбец только одного типа
> (т.е. в результате реального запроса, в зависимости от переданного параметра sortField
> для всех строк либо intData, либо stringData
> но сортировка в таком случае как сортировка строк. Пробовал вместо конструкции IF(aa.isInt,aa.intData,aa.stringData)
> написать aa.intData тогда всё сортирует верно.
> Я так понимаю проблема в том, что MySQL не знает какой тип
> у данного столбца, потому что он может быть разным для разных
> строк, но можно ли ему как то принудительно указать его?

ORDER BY IF(aa.isInt,aa.intData,aa.stringData)

+ http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как организовать сортировку по полю выбираемому через IF"  +/
Сообщение от G.NercY.uR on 04-Сен-13, 19:37 
> ORDER BY IF(aa.isInt,aa.intData,aa.stringData)
> + http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html

Спасибо Павел за ответ, но это тоже не сработало.
Разбил в итоге на два запроса, в первом получаю значения isInt,isFloat,isString и на основе того какой из них активен, просто ставлю в ORDER BY соответствующее поле.
Хотел просто исхитриться одним запросом.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру