我有一个像这样的MySQL脚本:SELECT id, name FROM users WHERE id IN (6,4,34)
在IN(...)数组中的顺序非常重要。是否可以按照给定的顺序获取它们?
您可以使用MySQL FIELD
函数使其更加简洁;
SELECT id, name
FROM users
WHERE id IN (6, 4, 34)
ORDER BY FIELD(id, 6, 4, 34);
尝试
SELECT id, name FROM users WHERE id IN (6,4,34) order by FIELD(id,6,4,34)
ORDER BY CASE id
WHEN 6 THEN 1
WHEN 4 THEN 2
WHEN 34 THEN 3
END ASC
$sortVal = 1;
foreach($ids as $id_val) {
$cases[] = sprintf('WHEN %i THEN %i', $id_val, $sortVal++);
}
$order_by = 'ORDER BY CASE id ' . implode($cases) . ' END ASC';
然而,我要提到Joachim的答案非常优雅 :-)
$ids = array("table1", "table2", "table3");
$sortVal = 1;
foreach ($ids as $id_val) {
$cases[] = sprintf("WHEN '%s' THEN %u ", $id_val, $sortVal++);
}
$order_by = 'ORDER BY CASE `tableName` ' . implode($cases) . ' END ASC';
$result = mysqli_query( $con, "
SELECT DISTINCT tableName
FROM `table`
$order_by");