php - 模糊 DISTINCT 值

标签 php mysql loops distinct strstr

我有一个房地产列表数据库,需要返回一个社区列表。现在我正在使用 mysql DISTINCT,它返回所有不同的值。我的问题是有很多社区的名称相似:示例:

Park View Sub 1
Park View
Park View Sub 2
Park View Sub 3
Great Lake Sub 1
Great Lake Sub 2
Great Lake 
Great Lake Sub 3

我正在寻找一个简单的 php 或 mysql 解决方案来识别“Park View”和“Great Lake”已经存在并且只返回“Park View”和“Great Lake”。

我最初的想法是如何按长度获取排序顺序,以便短值位于顶部,然后使用 strstr 循环。这听起来像是一项艰巨的任务,我想知道 mysql 或 php 中是否有一个函数可以轻松地做到这一点。

最佳答案

这里有一些你可以尝试的东西;大概您正在寻找完全匹配和接近匹配。

首先寻找完全匹配。 然后在 REVERSED 名称上查找 LIKE 匹配项。 然后寻找具有最少额外字符的匹配项。

这是一个可以完成所有这些的查询。请注意,如果您希望这样做高效,则需要将颠倒的地名存储在索引列中。

select name 
  from (
   select name, 0 ordinal
     from place 
    where name = 'Park View'
  union
  select name, 1 ordinal
    from place 
   where Reverse(Name) like concat(Reverse('Park View'),'%')
  union
  select name, 2+length(name)
    from place
   where name like concat('Park View','%')
 ) a 
order by ordinal
   limit 1

注意这个 UNION 查询如何使用 ordinal 来找出最佳匹配。

在这里查看:http://sqlfiddle.com/#!2/76a97/9/0

关于php - 模糊 DISTINCT 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165400/

相关文章:

PHP 套接字类型和 TCP 窗口大小

mysql - SQL 如何在为另一个表生成输出后列出 NULL 值

c++ - C++ 中的 "for loop"错误

java - 将此模式推广到 'n' 行

java - 循环遍历多个数组 - 电话号码到单词生成器

php - 没有绑定(bind)参数的 mysqli 准备语句仍然安全吗?

php - mysql_insert_id() 0,但插入成功

php - Magento 对产品和客户的限制

mysql - JPA:如何防止字段被写回数据库?

php - 重复的 SQL 错误 : 2006: MySQL server has gone away