我有一个表fs_city
,系统会检测用户的国家/地区,例如美国。然后,如果用户输入内容,它将自动填写城市名称。
例如," Ne"将自动完成"纽约" ,"新墨西哥","内布拉斯加州"等。我想要做的是首先放置来自给定国家(正在检测)的城市,然后列出来自其他国家的城市。
这是我当前的Sql查询:
SELECT
ci.city_id,
ci.country_code,
ci.city,
ci.region,
co.country
FROM
fs_city ci,fs_country co
WHERE
ci.city LIKE "'.$city.'%"
AND
ci.country_code LIKE :country
AND
co.code = UPPER(ci.country_code)
ORDER BY
ci.city
ASC LIMIT
0,20
所以,我想要添加到这个SQL查询中的是从其他国家/地区选择城市,并将其列在检测到的国家/地区(其国家/地区代码如:国家/地区)的城市中,其结果是总结果数为20。
如果它从我的国家返回2个城市,以" Ne"开头,例如:"纽约"和内布拉斯加城市",它必须列出其他国家的18个其他城市,尊重字母顺序。
所有这一切都在一个查询中。
答案 0 :(得分:3)
您可以通过摆弄order by
子句来完成此操作:
SELECT ci.city_id, ci.country_code, ci.city, ci.region, co.country
FROM fs_city ci join
fs_country co
ON co.code = UPPER(ci.country_code)
WHERE ci.city LIKE "'.$city.'%"
ORDER BY (ci.country_code LIKE :country) DESC,
ci.city
LIMIT 0, 20;
ORDER BY
有两个表达式。第一个将在国家/地区代码匹配时返回1
,否则返回0
。 DESC
将匹配放在第一位。第二个是城市。
请注意,我还修复了查询以使用显式join
语法。