【问题标题】:Fulltext search on a column with data from 2 tables对包含 2 个表的数据的列进行全文搜索
【发布时间】:2019-02-10 03:24:21
【问题描述】:

我在 MySql DB 中有两个表,分别命名为“Patients”和“Country”。 患者表包含

'name','dob',postcode','address', 'country_id'
Country 表有
'id' and 'country_name' 列。

现在,我希望用户输入患者姓名、邮政编码或国家/地区中的任何内容,并获取所需患者的结果/数据。

要实现这一点,我能想到的一种方法是使用联接执行查询。 另一种方式,我想问的是,当用户输入搜索变量时,将搜索变量(即姓名、邮政编码和国家/地区)存储在具有全文类型的列中是否是一种好方法,例如“name_postcode_country”我对新创建的列执行全文搜索。

或者我应该考虑其他更好的方法。

【问题讨论】:

  • 只需加入 country_id 上的两个表,并在 where 子句中对每个可搜索列使用 OR
  • 将数据保存在单独的列中比在合并的列中要好得多。搜索更容易、更高效。
  • 使用连接和点赞比使用“全文搜索”更好?
  • @PashmeenaNoor 你应该在name 上使用全文搜索。 postcodecountry_name 可能完全匹配。
  • @Nick 加油。谢谢(y)

标签: mysql sql database search full-text-search


【解决方案1】:

将所有这些信息保存在一个列中并不是一个好主意,您可以将这样的组合与 SELECT 一起使用,以连接提到的表:

select p.name, p.dob, p.postcode, p.address,
       c.country_name
  from Patients p
  inner join Country c 
     on ( p.country_id = c.id )
  where ( upper(name) like upper('%my_name_string%') ) 
     or ( upper(postcode) like upper('%my_postcode_string%') )
     or ( upper(country) like upper('%my_country_string%') );

您需要使用upperlower 伪列来解决区分大小写 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 2014-04-12
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多