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 に答える