首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对mysql进行连接查询

如何对mysql进行连接查询
EN

Stack Overflow用户
提问于 2014-06-22 12:27:37
回答 1查看 47关注 0票数 0

我有两个表,其中一个(让我们称之为‘轨道’)将有音乐轨道信息,如标题,时间,样本文件,价格和所有所需的东西。第二个表(让我们称之为“类别”)将具有从第一个表、类别类型(乐器、体裁、语气等)和类别id到类别id的id。

对于特定的轨道,可以有未知数量的类别。例如,使用id=1的曲目可以有乐器类别3和4,情绪类别1,2,3等等。

我需要得到排序(按标题,时间,价格或任何其他)的轨道,也使用限制(用于分页)过滤的情绪或乐器或任何类型(S)。

有人能帮我像这样组装查询吗?我不知道怎么开始。

下面是表结构的示例:

表“轨迹”

代码语言:javascript
复制
+----+---------+-------+------+
| id |  title  | Price | Time |
+----+---------+-------+------+
|  1 | Title 1 |    10 |    0 |
|  2 | Title 2 |     9 |    1 |
|  3 | Title 3 |     8 |    2 |
+----+---------+-------+------+

表“类别”

代码语言:javascript
复制
    +----+------------+-------------+----------+
    | id |    type    | category_id | track_id |
    +----+------------+-------------+----------+
    |  1 | instrument |           1 |        1 |
    |  2 | instrument |          10 |        1 |
    |  3 | genre      |           1 |        1 |
    |  4 | mood       |          15 |        2 |
    +----+------------+-------------+----------+

当然,我会使用int作为类别类型,但我使用单词作为示例。

关于致命缺陷的更新:

juergen d解决方案工作良好,但它有一个致命的缺陷。如果我有所有可能的乐器,类型和情绪在一个单独的下拉,我想过滤出有乐器1,情绪2和类型3的曲目,通过选择下拉框。清单上显示了所有有乐器的曲目或第二乐章或.没有,而且。

有人能帮我修改一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-22 12:31:18

一个更好的DB设计应该是

表“轨迹”

代码语言:javascript
复制
+----+---------+-------+------+
| id |  title  | Price | Time |
+----+---------+-------+------+
|  1 | Title 1 |    10 |    0 |
|  2 | Title 2 |     9 |    1 |
|  3 | Title 3 |     8 |    2 |
+----+---------+-------+------+

表“类别”

代码语言:javascript
复制
+----+------------+
| id |    type    |
+----+------------+
|  1 | instrument |
|  2 | genre      |
|  3 | mood       |
+----+------------+

表“track_categories”

代码语言:javascript
复制
+-------------+-------------------------+
| category_id | sub_category | track_id | 
+-------------+-------------------------+
|           1 |           3  |        1 |
|           1 |           1  |        1 |
|           3 |           1  |        1 |
|           2 |           3  |        2 |
+-------------+-------------------------+

然后可以运行查询(例如,对于体裁曲目)

代码语言:javascript
复制
select t.*
from tracks t
join track_categories tc on tc.track_id = t.id
join categories c on c.id = tc.category_id
where c.type = 'genre'

如果要选择具有特殊类型组合的曲目,请使用

代码语言:javascript
复制
select t.title
from tracks t
join track_categories tc on tc.track_id = t.id
join categories c on c.id = tc.category_id
group by t.title
having sum(c.type = 'instrument' and tc.sub_category = 1) > 0
and sum(c.type = 'mood' and tc.sub_category = 2) > 0
and sum(c.type = 'genre' and tc.sub_category = 3) > 0
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24351224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档