【发布时间】:2015-12-21 19:47:43
【问题描述】:
我的数据库表中有超过一百万条记录。 当我使用 like 时速度很慢,当我使用 match against 时,他们丢失了一些记录。
我创建帮助表:
tag_list
tag_id
tag_name
tag_rel_message
tag_id
messag_id
消息
message_id
message_text
在 tag_list 中我添加了 $message_text 的所有单词 - explode(" ", $message_text);
我的新查询是:
SELECT m.*
FROM tag_rel_messages trm
INNER JOIN messages m ON (trm.message_id = m.message_id)
INNER JOIN tag_list tl ON (trm.tag_id=tl.tag_id
WHERE tl.tag_name REGEXP 'pionas' AND tl.tag_name REGEXP 'website'
GROUP By trm.message_id
但不显示任何记录。
这个查询有什么问题? 也许我应该使用 REGEXP 以外的东西?
感谢您的帮助
【问题讨论】:
-
如果我理解正确的话,tag_list 的
tag_name只包含单个token 关键字,那么任何单个token 怎么可能同时匹配pionas和website? -
是的,只有单个关键字。你是对的。那么我应该怎么做才能只找到所有条件都为真的这条消息?
-
您的
WHERE子句指出tag_name需要同时匹配'pionas'AND'website'。也许尝试OR而不是AND? -
为什么是
LIKE和REGEXP?为什么不tag_name = 'pionas'? -
我使用正则表达式,因为 tag_name 可能是网站、网站等