2014-01-21 48 views
1

我有一個包含產品名稱列的表。在mysql中進行高級排序

我想按產品名稱升序對它進行排序,但我希望包含單詞「附件」的產品名稱最後排序。

這怎麼辦?

+0

' ORDER BY'接受逗號分隔的表達式列表。 –

回答

3

這是做到這一點的常用方法:

SELECT * FROM my_table 
ORDER BY product_name LIKE '%accessory%', product_name 

SELECT * FROM my_table 
ORDER BY LOCATE('accessory', product_name), product_name 

該條款product_name LIKE '%accessory%'是一個布爾表達式,它返回01,使所有不排比賽將返回0,並且將按排序順序提前顯示。

LOCATE('accessory', product_name)的工作原理相似,但會返回0表示不匹配或第一個匹配的整數位置。在這種情況下,兩者之間幾乎沒有什麼區別。

+0

您不應該先用'LOCATE('accessory',name)'命令嗎? –

+0

@RocketHazmat,是的!謝謝。 –

1
SELECT *, 
(CASE WHEN `productname` LIKE '%accessory%' THEN 1 ELSE 0 END) AS `relevance` 
    FROM `tablename` ORDER BY `relevance`, `productname` ASC 

你可以給基於MySQL的條件下使用case.

很明顯,你可以只在ORDER BY語句之前在那裏添加您的WHERE子句中的相關性,但在這個例子中我只選擇一切