如果您计划有很多行,全文索引解决方案是正确的方法。如果您使用的是MyISAM存储引擎,则可以使用MySQL's native solution,但您也可以考虑使用流行的第三方搜索引擎Sphinx和Apache Lucene。
。另一方面,一个简单的INNER JOIN
会做的伎俩:
SELECT t1.note_id, t1.note_body, t2.keyword
FROM table_1 t1
JOIN table_2 t2 ON (t1.note_body LIKE CONCAT('%', t2.keyword, '%'));
测试用例:
CREATE TABLE table_1 (note_id int, note_body varchar(100));
CREATE TABLE table_2 (keyword_id int, keyword varchar(50));
INSERT INTO table_1 VALUES (1, 'Hello Stack Overflow');
INSERT INTO table_1 VALUES (2, 'Hello World');
INSERT INTO table_1 VALUES (3, 'Hello, my name is Daniel');
INSERT INTO table_1 VALUES (4, 'Goodbye');
INSERT INTO table_2 VALUES (1, 'Hello');
INSERT INTO table_2 VALUES (2, 'name');
结果:
+---------+--------------------------+---------+
| note_id | note_body | keyword |
+---------+--------------------------+---------+
| 1 | Hello Stack Overflow | Hello |
| 2 | Hello World | Hello |
| 3 | Hello, my name is Daniel | Hello |
| 3 | Hello, my name is Daniel | name |
+---------+--------------------------+---------+
4 rows in set (0.00 sec)
真棒,谢谢。我会去索引选项,但也很好地知道,如果涉及的数据集足够小(经过多次尝试,我仍然无法保持JOIN的直线...),那么加入会处理它。 – NChase 2010-09-21 08:40:07