我坚持使用以下查询,它在放弃幽灵之前似乎部分工作。我不是大师,但我会感激任何帮助。
我有两张桌子
key | tag | timesused
---------------------------
1 retriever 12
2 jack retriever 1
3 energetic 5
4 bulldog 3
key dogname description tags
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 Jack Retriever Jacks only just been with us for a short while he's a golden retriever that is energetic and loves to play with a frisbee. Does not like canned food. ,retriever,golden,energetic,frisbee
查询应返回:
retriever
jack retriever
energetic
...相反它只返回:
jack retriever
这是查询:
$dogname= strtolower($_GET['dogname'])
$description= strtolower($_GET['description'])
$tags= strtolower($_GET['tags'])
SELECT `key`, `tag`
FROM `cms_tags`
WHERE `tag` LIKE '%$dogname%'
OR `tag` LIKE '%$description%'
OR `tag` LIKE '%$tags%'
ORDER BY `primkey`
LIMIT 0, $finalnumber;
答案 0 :(得分:1)
$tags
参数的值为',retriever,golden,energetic,frisbee'
,因此没有匹配的行。不要使用LIKE
,请尝试使用IN ([Value list])
。
示例:强>
SELECT key, tag
FROM cms_tags
WHERE tag IN ('retriever','golden','energetic','frisbee')
此查询将返回tag
字段具有列表中任何值的每一行。但请注意,您不能使用通配符。
希望这会对你有所帮助。
答案 1 :(得分:0)
感谢所有帮助,特别是OMG小马指导我指向FTS方向,我最终做了以下
ALTER TABLE cms_tags ADD FULLTEXT(tag);
ALTER TABLE cms_doggies ADD FULLTEXT(dogname, description, tags);
SELECT * FROM cms_tags WHERE MATCH (tag) AGAINST ('$dogname $description $tags') LIMIT 0, $number;
查询现在返回
猎犬 杰克猎犬 高能
因为它们在cms_tags表中,它也会返回
播放 食品
我必须想出一种方法来过滤像这样的常用词。
再次感谢您的帮助。