我想知道如何才能获得具有独特城市的独特行/记录,而不关心它是否是资本,例如:
Akron
akron
aKRON
只会返回一条记录。
我厌倦了这样的事情,但它不起作用
"SELECT DISTINCT(city) AS city,state_prefix,lattitude,longitude FROM zip_code WHERE city LIKE '$queryString%' LIMIT 10"
谢谢...
答案 0 :(得分:11)
你可以使用这个仅限mysql的技巧:
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
的每个唯一值返回遇到的第一行。
其他数据库会抱怨您有非= -aggregated列未在组中列出或者某些此类消息。
之前我声称不在分组列上使用upper()
函数,它会返回所有案例变体,但这是不正确的 - 感谢SalmanA指出了这一点。我使用SQLFiddle进行了验证,您不需要使用upper()
。
答案 1 :(得分:2)
它不适用于其他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 '
您还可以按单个字段(在本例中为城市)进行分组,并返回所有其他字段。其他字段的值未确定,它们通常是第一行中的值,但您无法继续进行中断。
答案 2 :(得分:2)
您可以在GROUP BY中使用函数将所有名称转换为大写或小写:
SELECT city,state_prefix,lattitude,longitude
FROM zip_code WHERE city LIKE '$queryString%'
GROUP BY UPPER(city), UPPER(state_prefix) LIMIT 10
我假设一个城市和州的比赛,经度和经度可以安全地汇总。
答案 3 :(得分:2)
您的表格或城市列可能具有区分大小写的排序规则设置。
您可以像这样在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