2015-02-09 2 views
-1

Моя ситуация немного сложнее, чем order-by-enum-field-in-mysqlORDER BY «ENUM поле» с расчетной области в MYSQL

My SQL является:

SELECT `a`.`ChannelID`, 
    `a`.`CategoryID`, 
    `a`.`Country`, 
    `a`.`LocalName`, 
    if((`a`.`Type` = 'FreeText' 
     AND a.IsHybrid = 'YES'), 'Hybrid', 
     if(`a`.`Type` = 'FreeText' 
     AND a.IsHybrid = 'NO', 'FreeText', a.Type)) AS TYPE, 
    `a`.`IsHybrid` 
FROM `ProCatCountry` AS `a` 
    INNER JOIN `ProCat` AS `b` ON a.CategoryID = b.CategoryID 
ORDER BY FIELD(a.TYPE, 'FreeText', 'Hybrid', 'Structured') ASC 

Но порядок не является правильным, появились первые FreeText записи затем снова появился Hybrid, затем FreeText.

Поле TYPE является перечислением, и я хочу заказать по этому полю, между тем, значение, которое не включено в список перечислений - расчетное значение, которое называется Hybrid, также должно быть заказано правильно. Как я могу это сделать?

Первоначально было обнаружено TYPE поле неоднозначной ошибки, благодаря @Jens, после изменения на a.TYPE, неоднозначная ошибка была решена.

+0

У вас есть столбец 'type' в обеих таблицах? –

+1

@juergend Да, у меня тоже поле 'TYPE' в таблице' ProCat' – Phoenix

ответ

0

Вы должны добавить псевдоним таблицы в order by высказыванием:

ORDER BY FIELD(a.TYPE, 'FreeText', 'Hybrid', 'Structured') ASC 

Becuase это столбец обеих таблиц.

+0

Эй, неоднозначная ошибка исчезла после добавления в 'a.TYPE', но появилась новая проблема, я изменил свой вопрос, пожалуйста, взгляните, Спасибо! – Phoenix

+0

@Phenix Не так важно выйти из вопроса. Вы должны обновить свой вопрос, что сообщество увидит, что вопрос изменился. Поэтому лучше разрешить исходный вопрос и добавить проверку 'UPDATE' – Jens

+0

@Phoenix Можете ли вы показать образцы данных или sqlfiddle. – Jens

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