鉴于我的表
id | name
01| Test Name
02| Name Test
03| Another name
...
...
nn| Test string
我想对每个条目执行以下操作,读取第一个单词,直到空格,所以在此示例中我将读取Test,然后,找到包含Test where 在字符串上,然后继续名称,另一个,依此类推。
我不想手动执行此操作,因为我必须进行很多的查询,我们的想法是从旧的Excel电子表格导入数据并且客户端想要获取重复的名称,因此测试名称,测试名称和名称测试是潜在的相似名称。
答案 0 :(得分:3)
您想要运行查询,选择所有名称,将其返回给php,然后循环遍历它,将字符串解析为单独的单词,并运行带有全文索引的查询。
答案 1 :(得分:2)
这是我的数据库解决方案:
SELECT *
FROM princess a
INNER JOIN (SELECT
DISTINCT CASE
WHEN name LIKE '% %'
THEN SUBSTR(name, 1, LOCATE(' ', name) - 1)
ELSE name
END AS 'name'
FROM princess) b ON a.name LIKE CONCAT('%', b.name ,'%')
这将使用DISTINCT
找到JOIN
名称(在空格之前),然后LIKE
找到原始表格。
您也可以考虑使用INSTR(a.name, b.name)
代替b.name LIKE CONCAT('%', a.name ,'%')
,具体取决于EXPLAIN
的外观。
答案 2 :(得分:0)