1

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

4

1 回答 1

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
...
于 2013-04-13T09:01:21.127 回答