mysql使用like查找两个表

时间:2010-07-12 22:35:00

标签: mysql

我坚持使用以下查询,它在放弃幽灵之前似乎部分工作。我不是大师,但我会感激任何帮助。

我有两张桌子

cms_tags

key  | tag          |  timesused
---------------------------
1     retriever        12
2     jack retriever   1
3     energetic        5
4     bulldog          3

cms_doggies(四个字段=密钥,dogname,描述,标签)

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;

2 个答案:

答案 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表中,它也会返回

播放 食品

我必须想出一种方法来过滤像这样的常用词。

再次感谢您的帮助。