我有以下 SQL 表
ID | country_id | name
1 33 test1
2 77 test3
3 33 test5
4 1 test6
5 77 test7
6 33 test8
我想按country_id排序,其中每个country_id都有自己的名称(但不在另一个数据库中)。
例如:
$countries = array(
77 => 'Macedonia',
33 => 'Uruguay',
1 => 'Ghana'
);
所以结果会是这样的:
ID | country_id | name
4 1 (G hana) test6
2 77 (M acedonia) test3
5 77 (M acedonia) test7
1 33 (U ruguay) test1
3 33 (U ruguay) test5
6 33 (U ruguay) test8
最佳答案
您会对 MySQL 的 FIELD()
感兴趣函数允许您定义自定义 ORDER BY
查询:
SELECT
id, country_id, name
FROM
countries
ORDER BY
FIELD(country_id, 77, 33, 1);
FIELD()
允许您定义一个“有序列表”,然后检查您传入的值位于列表中的索引/位置;您可以使用它来生成自定义 ORDER BY
。
如果您在 PHP 中有一个像 $countries
所示的数组,您可以轻松地生成查询:
$country_ids = join(',', array_keys($countries));
$fieldClause = 'FIELD(country_id, ' . $country_ids . ');'
或者,如果您有第二个包含国家/地区名称的引用表,您可以针对该表JOIN
:
SELECT
a.id, a.country_id, a.name
FROM
your_table a
JOIN countries c
on a.country_id = c.id
ORDER BY
c.name;
我推荐后一种方法,因为它更便携。
关于php - SQL 查询按 id 和预定义名称排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118417/