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

Ale*_*x G 1 php mysql sql

有一些ID:

$ids = "'55-30269','50-30261','50-30254','50-30257','50-30268','50-30253'";
Run Code Online (Sandbox Code Playgroud)

有这个查询:

$sql = "SELECT * FROM `report` WHERE `id` IN ($ids)";
Run Code Online (Sandbox Code Playgroud)

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

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

Joh*_*Woo 6

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

SELECT  *
FROM    report
WHERE   ID IN ($ids)
ORDER   BY FIELD(ID, $ids)
Run Code Online (Sandbox Code Playgroud)

你在没有单引号的情况下传递ID时没有得到确切结果的原因,

$ids = "55-30269,50-30261,50-30254,50-30257,50-30268,50-30253"
Run Code Online (Sandbox Code Playgroud)

是因为MySQL对值执行算术运算.

55-30269 = -30216
50-30261 = -30211
...
Run Code Online (Sandbox Code Playgroud)