私は、インポートされた情報を格納するデータベーステーブルを持っています。簡単にするために、のようなその何か: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のテキスト検索の選択肢がオプションかどうかは分かりません。私は、必要に応じてそのテーブルを切り替えることができるかもしれません。
質問したい質問がありましたか? –
まあ、個人的には、私は評判のためにここにいます。 –
申し訳ありませんが、私は明らかにその文句は正しくありませんでした。完全な文字列ではなく、(潜在的な)部分一致と結合することを前提にして、どのようにクエリを構築するのですか?それでもパフォーマンスは維持されます。 – JonoB