我是个不懂SQL的人,不知道如何恰当地命名这个问题。如果有这种类型的搜索名称,请随意编辑标题,或发表评论,我会更改它。
我有一张桌子叫movies

-------------------------
| id       | movie_name |
-------------------------
| 0        | Star Wars  |
| 1        | Casablanca |
-------------------------

然后是一个名为movie_tag_options的表,其中包含电影的所有允许标记:
-------------------------
| id       | name       |
-------------------------
| 0        | Action     |
| 1        | Sci-Fi     |
| 2        | Romance    |
-------------------------

然后是一个名为movie_tags的表,它是如何将标记分配给电影的:
---------------------------------------
| id       | tag_option_id | movie_id |
---------------------------------------
| 0        | 0             | 0        |
| 1        | 1             | 0        |
| 2        | 2             | 1        |
---------------------------------------

我想创建一个搜索特性,用户可以使用标记搜索电影,在执行MySQL搜索之前,我会将其转换为标记选项id。
因此,如果有人搜索带有“Action”和“Sci Fi”标签的电影,我将把标签选项id01传递给搜索查询,该查询将返回星球大战的行。
如何用MySQL实现这种类型的搜索?
旁白:我考虑过将标记选项id存储在movies中的列中,然后使用Sphinx进行搜索,这很容易做到。不过,我不确定哪种方法更好。

最佳答案

你使用毒素模式

SELECT b.*
FROM tagmap bt, bookmark b, tag t
WHERE bt.tag_id = t.tag_id
AND (t.name IN ('bookmark', 'webservice', 'semweb'))
AND b.id = bt.bookmark_id
GROUP BY b.id
HAVING COUNT( b.id )=3

根据你的需要调整
http://tagging.pui.ch/post/37027745720/tags-database-schemas
有更多的例子

关于mysql - 如何在MySQL中实现这种类型的搜索?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29263891/

10-17 02:17