有一些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";
答案 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
...