【发布时间】:2015-03-25 18:40:38
【问题描述】:
我是一个 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。
因此,如果有人搜索带有“动作”和“科幻”标签的电影,我会将标签选项 ID 0 和 1 传递给搜索查询,它应该返回星球大战的行。
如何使用 MySQL 实现这种类型的搜索?
顺便说一句:我考虑将标签选项 ID 存储在 movies 的列中,然后使用 Sphinx 进行搜索,这很容易做到。不过,我不确定哪种方法更好。
【问题讨论】:
-
这种类型的查询只是一个直接的JOIN。您将行链接在一起并获取任何匹配的内容。你也可以做 LEFT/RIGHT JOINS、OUTER JOINS 和其他一些。在 Google 上搜索“sql types of JOINS”,应该会提供一些有用的阅读。