mysql order_by问题

时间:2009-11-06 04:27:58

标签: sql mysql

查询表文章:

select * from articles where article_id in(98,97,96,99)

返回结果,如

record 96 ...
record 97 ...
record 98 ...
record 99 ...

但我更喜欢结果与'in(98,97,96,99)'相同。任何使它成为可能的技巧? 谢谢。

4 个答案:

答案 0 :(得分:1)

我想这可能有用:

select * from articles where article_id in(98,97,96) order by article_id desc
union
select * from articles where article_id = 99

我看不到你订购的任何模式,所以我想不出有任何其他方法可以做到这一点。

答案 1 :(得分:1)

Shawn,在MYSQL中使用IN语句

它将第一个记录ID与您给定的ID进行比较。 然后将第二个记录ID与您的给定ID进行比较。 所以...

因此结果将以asc顺序显示。

如果您不需要使用IN语句。我更喜欢在循环中检索每条记录。

三江源

答案 2 :(得分:1)

你可能会做这样的事情:

select * from articles where article_id in(98,97,96,99) order by article_id == 98 desc, article_id == 97 desc, article_id == 96 desc, article_id == 99 desc;

答案 3 :(得分:1)

IN功能受限于列表大小。更有可能的是,一旦列表达到几百个条目,您的性能就会下降 - 您也可以单独检索记录并在客户端中对它们进行排序。

话虽如此,还有另一个MySQL函数FIND_IN_SET,你可以考虑实现你的ORDER BY。 FIND_IN_SET只能处理集合中最多64个成员。

ORDER BY
    FIND_IN_SET( article_id, '98,97,96,99' )