php - SQL 查询按 id 和预定义名称排序

标签 php mysql sorting select

我有以下 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/

相关文章:

php - 创建并添加到 session

javascript - AJAX 请求未进入就绪状态 4

php - 在表中存储 cookie 的字段类型是什么?

mysql - codeigniter 对返回的查询结果进行排序

wpf - ObservableCollection 不对新添加的项目进行排序

php - 用于数据库连接的全局或单例?

MySQL 查询 : 3 tests passed, 1 失败

php mysql 按日期排序(最近)

c++ - DBGrid 按计算字段排序

php - 使用 php 和 Ajax 的 Highcharts 柱形图