按照MySQL IN()中指定的相同顺序对行进行排序

时间:2013-04-13 08:58:16

标签: php mysql sql

有一些ID:

$ids = "'55-30269','50-30261','50-30254','50-30257','50-30268','50-30253'";

有这个查询:

$sql = "SELECT * FROM `report` WHERE `id` IN ($ids)";

我希望行的顺序与$ids中指定的顺序相同。 而不是我得到这些行最初插入表中的顺序。

另外,我不确定为什么我需要将每个id放在引号'55-30269'中,但查询不会以其他方式执行。例如。 $ids = "55-30269,50-30261,50-30254,50-30257,50-30268,50-30253";

1 个答案:

答案 0 :(得分:6)

因为ID的数据类型是字符串。字符串文字必须用单引号括起来。如果您想根据指定的ID订购结果,请使用FIELD()进行自定义重新排序。

SELECT  *
FROM    report
WHERE   ID IN ($ids)
ORDER   BY FIELD(ID, $ids)

在没有单引号的情况下传递ID时无法获得准确结果的原因

$ids = "55-30269,50-30261,50-30254,50-30257,50-30268,50-30253"

是因为MySQL对值进行算术运算。

55-30269 = -30216
50-30261 = -30211
...