Mysql 获取与LIKE语句组合的唯一列
我有一个带有列的“places”表:id(唯一)、name、postal。名称可以重复 我想执行查询以查找前20条记录,其中名称以someMysql 获取与LIKE语句组合的唯一列,mysql,sql,Mysql,Sql,我有一个带有列的“places”表:id(唯一)、name、postal。名称可以重复 我想执行查询以查找前20条记录,其中名称以someneedle开头,但没有重复的名称。它是用于ajax实时搜索的。 重点是,我需要将这一点与邮政结合起来,因为我不想从不同的地区削减地方。前两封信就足够了 数据示例: id name postal 1 Bradford BD83CB 2 Bradford BD74RT 3 Keighley BD215CT 4 Bradford CC763DD 5 Braster
needle
开头,但没有重复的名称。它是用于ajax实时搜索的。
重点是,我需要将这一点与邮政结合起来,因为我不想从不同的地区削减地方。前两封信就足够了
数据示例:
id name postal
1 Bradford BD83CB
2 Bradford BD74RT
3 Keighley BD215CT
4 Bradford CC763DD
5 Braster DD339CL
这里的针是“胸罩%”
结果应该包含id 1、4和5,因为id为4的记录中的Bradford位于id为1和2的Bradford之外的另一个区域
我所尝试的:
SELECT id, `name`, postal FROM places WHERE `name` LIKE 'needle%' GROUP BY `name` LIMIT 20
但这当然是不够的,因为这会删除所有名称
,我不会有id为1、4、5的记录,而只会有id为1的记录。我应该加上邮政条件
最后一点是ajax搜索应该尽可能快
如果没有选择高性能的选项,我考虑添加列<代码>可搜索< /代码>可能的值0和1,并将其应用于其中的语句。
,但我不能测试性能。 DROP TABLE IF EXISTS T;
CREATE TABLE T (id INT,name VARCHAR(20), postal VARCHAR(10));
INSERT INTO T VALUES
(1, 'Bradford' ,'BD83CB'),
(2, 'Bradford' ,'BD74RT'),
(3, 'Keighley' ,'BD215CT'),
(4, 'Bradford' ,'CC763DD'),
(5, 'Braster' ,'DD339CL');
SELECT ID,NAME,POSTAL
FROM T
WHERE ID = (SELECT MIN(ID) FROM T T1 WHERE T1.NAME = T.NAME AND LEFT(T1.POSTAL,2) = LEFT(T.POSTAL,2))
AND NAME LIKE 'BRA%'
;
结果
+------+----------+---------+
| ID | NAME | POSTAL |
+------+----------+---------+
| 1 | Bradford | BD83CB |
| 4 | Bradford | CC763DD |
| 5 | Braster | DD339CL |
+------+----------+---------+
3 rows in set (0.00 sec)
我觉得这个更简单,性能更好
SELECT id, `name`, postal, substring(postal, 1, 2) FROM places WHERE `name` LIKE 'Bra%' GROUP BY substring(postal, 1, 2);
此外,此版本正在我的安装程序(maridb 10.1.29)中运行
+------+----------+---------+
|id |姓名|邮政|
+------+----------+---------+
|1 |布拉德福德| BD83CB|
|4 |布拉德福德| CC763DD|
|5 | Braster | DD339CL|
+------+----------+---------+
一组3行(0.00秒)
我如何知道邮政a和邮政b属于两个不同的国家?你们也有国家栏吗?关于国家没什么可做的,也没有国家栏。只有两个邮政的前两个字母决定它们是否相同,地点是否在同一个县/地区。请参阅
SELECT id, `name`, postal FROM places WHERE `name` LIKE 'Bra%' GROUP BY substring(postal, 1, 2);