我想看看如何只获得具有独特城市的独特行/记录,而不关心它是否是首都,例如:
Akron
akron
aKRON
只会返回一条记录。
我厌倦了这样的事情,但它不起作用
"SELECT DISTINCT(city) AS city,state_prefix,lattitude,longitude FROM zip_code WHERE city LIKE '$queryString%' LIMIT 10"
谢谢...
您可以使用这个 mysql-only 技巧:
SELECT city, state_prefix, lattitude,longitude
FROM zip_code WHERE city LIKE '$queryString%'
GROUP BY city, state_prefix -- Here's the trick
LIMIT 10
这将返回 和的每个唯一值遇到的第一行。city
state_prefix
其他数据库会抱怨您有未在 group by 或某些此类消息中列出的 non=-aggregated 列。
以前我声称不使用upper()
分组列上的函数会返回所有大小写变化,但这是不正确的 - 感谢 SalmanA 指出这一点。我使用 SQLFiddle 进行了验证,您不需要使用upper()
.
它不适用于其他 DBMS,但在 MySql 中您可以使用它:
SELECT city, state_prefix,lattitude,longitude
FROM zip_code WHERE city LIKE '$queryString%'
GROUP BY city
LIMIT 10
MySql 在比较字符串时忽略大小写,例如返回 true:
select 'hello'='Hello '
您还可以按单个字段(在本例中为城市)分组并返回所有其他字段。其他字段的值未确定,它们通常是第一行中的值,但您不能对此进行中继。
您可以使用 GROUP BY 中的函数将所有名称转换为大写或小写:
SELECT city,state_prefix,lattitude,longitude
FROM zip_code WHERE city LIKE '$queryString%'
GROUP BY UPPER(city), UPPER(state_prefix) LIMIT 10
我假设如果一个城市和州匹配,纬度和经度可以安全地卷起。
您的表格或城市列可能具有区分大小写的排序规则设置。
您可以像这样在 SELECT 语句中显式选择排序规则。如果您选择不区分大小写的排序规则,则DISTINCT
关键字将执行您希望它执行的操作。
SELECT DISTINCT
city COLLATE utf8_general_ci,
state_prefix COLLATE utf8_general_ci,
lattitude,longitude
FROM zip_code
WHERE city LIKE '$queryString%'
LIMIT 10