Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取与LIKE语句组合的唯一列_Mysql_Sql - Fatal编程技术网

Mysql 获取与LIKE语句组合的唯一列

Mysql 获取与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

我有一个带有列的“places”表:id(唯一)、name、postal。名称可以重复

我想执行查询以查找前20条记录,其中名称以some
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);