SELECT WHERE IN(a,b,c)查询:按条件顺序(a,b,c)对结果进行排序

时间:2013-12-29 18:02:08

标签: mysql sorting

image_tags表中我有很多aaa个标签,只有一个bbb标签

我希望获得带有此标记的行,但基本上是IN ('bbb', 'aaa')的顺序 我希望bbb代码位于aaa代码之后,然后通过id desc对其进行排序

我得到了这个,但它不起作用,我仍然在顶部获得aaa标记

SELECT image_tags.tag
FROM `image_tags`
WHERE image_tags.tag
IN (
'bbb', 'aaa'
)
ORDER BY FIELD( 'bbb', 'aaa' ) , id DESC
LIMIT 20 

2 个答案:

答案 0 :(得分:2)

我想你想要:

ORDER BY FIELD(image_tags.tag, 'bbb', 'aaa' ) , id DESC

您错过了field()的第一个参数。

答案 1 :(得分:0)

试试这个,基本上你想按降序排列名称,然后是id desc。

SELECT image_tags.tag
    FROM `image_tags`
    WHERE image_tags.tag
    IN (
    'bbb', 'aaa'
    )
    ORDER BY image_tags.tag Desc , id DESC
    LIMIT 20

修改

我的问题有问题,解决问题的一种方法已经由@Gordon Linoff说明,它将在mysql中运行,另一种解决方案

SELECT image_tags.tag
    FROM `image_tags`
    WHERE image_tags.tag
    IN (
    'bbb', 'aaa'
    )
    ORDER BY case when 'bbb' then 1 when 'aaa' then 2 end , id DESC

这也适用于sql。