我有一张包含联系信息的表格。该表有1列与名称相关。它看起来像这样:
Sort Name:
Doe, John
Clinton, Bill
Dooby Doo, Scooby
可悲的是,没有名字/姓氏列,也无法添加。 如果用户输入搜索词“john doe”,有什么方法可以让mysql返回“Doe,John”列作为我的结果?
编辑:作为RHSeeger答案的后续跟进,我该怎么做
john doe
进入
$name(0=>'john', 1=>'doe')
使用php
感谢目前为止提供的帮助
答案 0 :(得分:2)
我的想法是:
SELECT * FROM tablename
WHERE LOWER(sort_name) LIKE '%name1%'
...
AND LOWER(sort_name) LIKE '%nameN%'
其中< name1> ...< nameN>是用户要求的名称中的单个小写“单词”(以空格分隔,逗号?)。
编辑:值得注意的是,对于相当大的数据集,这样的搜索会变慢。如果您要获得大量数据,可以考虑使用搜索引擎(如SOLR)来搜索内容,并使用MySQL进行ID查找。
答案 1 :(得分:0)
在您的应用中,将搜索字词拆分到最后一个空格,更改顺序并在其间添加逗号。
答案 2 :(得分:0)
我首先将搜索解析为可分离的单词“john”和“doe”,然后使用LIKE功能为这两个术语编写搜索。
编辑: 从下面的答案中回答你的问题......如何将“John Doe”解析为“John”和“Doe” 我会编写一个MySQL存储过程来将它们分成包含“John”和“Doe”的结果集,然后使用类似于该列名称
答案 3 :(得分:0)
查看sql“like”运算符。例如
select * from TABLENAME
where sort_name like '%doe'
您需要对应用程序端的搜索术语进行一些操作,并可能在sql语句中提供其他条件子句以及其他类似的子句。
答案 4 :(得分:0)
在names列上有一个全文索引,然后执行此操作,
select * from names where match(name) against ('john doe');