我有一个类似这样的查询:
谢谢!
SELECT * FROM table WHERE id IN (2,4,1,5,3);
然而,当我将其打印出来时,它会自动排序为1,2,3,4,5。我们如何在不更改数据库结构的情况下保留顺序(2,4,1,5,3)?谢谢!
SELECT * FROM table WHERE id IN (2,4,1,5,3) ORDER BY FIELD(id,2,4,1,5,3);
来源: http://imthi.com/blog/programming/mysql-order-by-field-custom-field-sorting.php
SELECT * FROM table
WHERE id IN (3,6,1,8,9)
ORDER BY CASE id WHEN 3 THEN 1
WHEN 6 THEN 2
WHEN 1 THEN 3
WHEN 8 THEN 4
WHEN 9 THEN 5
END
在 PHP 中,你可以这样做:
<?php
$my_array = array (3,6,1,8,9) ;
$sql = 'SELECT * FROM table WHERE id IN (3,6,1,8,9)';
$sql .= "\nORDER BY CASE id\n";
foreach($my_array as $k => $v){
$sql .= 'WHEN ' . $v . ' THEN ' . $k . "\n";
}
$sql .= 'END ';
echo $sql;
?>
SELECT * FROM countries ORDER BY code='USA' DESC, code='CAN' DESC, name ASC
按字段排序从未对我起作用。我有一个国家列表,需要将美国和加拿大排在列表的顶部,因此我的查询如下:
SELECT * FROM countries ORDER BY code='USA', code='CAN', name ASC
这个从来没有起作用,但我意识到顺序不同,它将加拿大和美国显示在列表的末尾,所以我做了这个操作:
SELECT * FROM countries ORDER BY code!='USA', code!='CAN', name ASC
它起作用了...为什么?我也不知道,但它确实起作用了;你也可以试一下。