2010-11-19 134 views
1

我有一个存储导入信息的数据库表。为简单起见,它是这样的:mysql搜索查询

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 

因此,举例来说,可以说,我们有“可口可乐”的import_rules.search记录,“可口可乐”的import_data.payee记录。然后我们得到一场比赛。

现在,让我们说,我们希望使这一点更加灵活,并且使得即使搜索与收款人的一部分相匹配,我们也会得到一个匹配。因此,import_rules.search ='cola'和import_data.payee ='coca cola'仍然会导致匹配。

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

+2

您有问题想问一下吗? – 2010-11-19 23:22:17

+2

呃,亲自,我在这里是为了声望.. – 2010-11-19 23:57:49

+0

对不起,我明显没有说过这句话。鉴于我现在正在加入(潜在)部分匹配而不是完整字符串,我该如何构建查询。并且仍然保持性能。 – JonoB 2010-11-20 16:53:35

回答

0

对于这种情况下,您可以使用MATCH (field1) AGAINST(value)从数据库中搜索相关单词。