2015-02-09 34 views
-1
的計算領域

我的情況有點複雜得多order-by-enum-field-in-mysqlORDER BY「ENUM場」與MYSQL

我的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'列嗎? – 2015-02-09 08:26:27

+1

@juergend是的,我在'ProCat'表中也有'TYPE'字段 – Phoenix 2015-02-09 08:28:43

回答

0

你要添加表別名order by聲明:

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

監守它是兩個表的列。

+0

嗨,添加到'a.TYPE'後模糊錯誤消失了,但是出現了新問題,我修改了我的問題,請看看,謝謝! – Phoenix 2015-02-09 08:32:16

+0

@Phenix退出問題並不是一個好主意。你應該更新你的問題,社區看到問題已經改變。因此,最好讓原始問題可見,並添加一個檢查「更新」 – Jens 2015-02-09 08:34:41

+0

@Phoenix您可以顯示示例數據還是一個sqlfiddle。 – Jens 2015-02-09 08:34:58