Php 按id排序的SQL查询';具有预定义名称的
我有下面的SQL表Php 按id排序的SQL查询';具有预定义名称的,php,mysql,sorting,select,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 我想按国家编号订购,每个国家编号都有自己的名称(但不在另一个数据库中) 例: 结果是这样的:
ID | country_id | name
1 33 test1
2 77 test3
3 33 test5
4 1 test6
5 77 test7
6 33 test8
我想按国家编号订购,每个国家编号都有自己的名称(但不在另一个数据库中)
例:
结果是这样的:
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的函数感兴趣,该函数允许您通过查询定义自定义的
订单:
SELECT
id, country_id, name
FROM
countries
ORDER BY
FIELD(country_id, 77, 33, 1);
FIELD()
允许您定义“有序列表”,然后检查您传入的值在列表中的索引/位置;您可以使用它通过
生成自定义的订单
如果您有一个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;
我建议使用后一种方法,因为它更便于携带。您需要使用$countries
数组,对其进行排序,并按的顺序使用它:
sort($countries);
$order = implode(', ', array_keys($countries));
现在数组按值排序,您可以使用键作为字段()
中的顺序,如newfurnity所示:
SELECT id, country_id, name
FROM countries
ORDER BY FIELD(country_id, $order);
但是,即使只有3个国家,我也会创建另一个表并加入其中。您没有将国家id映射到您要订购的国家名称的表吗?若否,原因为何?若国家名称只存在于应用程序代码中,那个么我将把排序留给应用程序。否则,您将得到一个紧密耦合、脆弱的解决方案,尝试根据其他地方存在的某些国家/地区映射按DB排序。不,我没有其他表。我不能创建一个。如果可以的话,为什么还要在数据库中有一个国家id;你没有另一个表可以将这些id映射到有用的东西吗?若您可以修改此表的架构,或许只需将id替换为国家名称即可。我也觉得奇怪,你不能创建一个表。如果有人想让你做这项工作并实现这项功能,他们需要允许你潜在地更改模式。我只有三个国家类型可以随时更改,所以我不明白为什么我应该只为三个表构建一个表。好吧,但是它怎么知道77是马其顿的,33是乌拉圭的等等。此外,必须根据ID的指定名称自动进行排序。@TudorRavoiu您说过您有一个预定义的列表;如果没有关系表,则必须进行一些硬编码(即,按照关系表的顺序编写)。我已经更新了我的答案,以展示一个快速的示例,如果有帮助的话,您可以使用示例$countries
数组来使用PHP。
SELECT id, country_id, name
FROM countries
ORDER BY FIELD(country_id, $order);