mysql搜索查询

时间:2010-11-19 23:15:45

标签: mysql search

我有一个存储导入信息的数据库表。为简单起见,它的内容如下:

CREATE TABLE `data_import` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`payee` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `payee` (`payee`)
)

我还有一个存储导入规则的表:

CREATE TABLE `import_rules` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`search` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `search` (`search`)
)

这个想法是,对于每个导入的事务,查询需要尝试查找单个匹配规则 - 此匹配在data_import.payee和import_rules.seach字段上完成。因为这些都是varchar字段,所以我已将它们编入索引,以期使查询更快。

这是我到目前为止所提出的,似乎工作正常。

SELECT i.id, i.payee, i.amount, i.posted r.id, r.search
FROM import_data id
LEFT JOIN import_rules ir on i.payee = ir.search

因此,例如,假设我们有'coca cola'的import_rules.search记录,以及'coca cola'的import_data.payee记录。然后我们得到一个匹配。

现在,让我们说我们想让它更灵活一点,并且让它即使搜索与收款人的一部分匹配,那么我们得到一个匹配。因此,import_rules.search ='cola'和import_data.payee ='coca cola'应该仍会产生匹配。

我的理解是各种“LIKE'%search%'”表现不佳。我在innodb上运行,所以不确定myisam的文本搜索替代方案是否可行。如果需要,我可以切换一个表。

1 个答案:

答案 0 :(得分:0)

对于这种情况,您可以使用MATCH (field1) AGAINST(value)来搜索数据库中的特定单词。