2010-11-19 322 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)從數據庫中搜索相關單詞。