如何从 mysql 中过滤数据


How can i filter my data from mysql?

假设我有 3 个表:

table:     SONGS
cell:      ID            primary key
cell:      TITLE
cell:      ADD_TIME
table:     CATEGORIES
cell:      ID            primary key
cell:      title
table:     SONGS_CATEGORIES
cell:      ID            primary key
cell:      SONG_ID
cell:      CATEGORY_ID

然后让我们假设我有 3 首歌曲(id 为 0、1、2),我有 5 个类别(摇滚、流行、说唱等)和它们的 id(0、1、2...)。我的 sql 查询应该是什么样子的,如果我希望能够选择多个类别,那么我需要查看表 SONGS_CATEGORIES 并获取我选择的类别 id 的所有songs_id,然后我从具有这些 id 的表 SONGS 中获取歌曲?

希望我很好地解释了我需要的东西,英语不是我的母语。

如果您已经知道想要从中播放歌曲的类别的 ID 号,那么以下内容应该可以解决问题:

SELECT *
FROM SONGS s
     JOIN SONGS_CATEGORIES sc
       ON s.ID = sc.SONG_ID
WHERE sc.CATEGORY_ID IN (@id1, @id2, @id3...@idN);

如果您只知道想要歌曲的类别的名称,则可以使用它:

SELECT *
FROM SONGS s
     JOIN SONGS_CATEGORIES sc
       ON s.ID = sc.SONG_ID
     JOIN CATEGORIES c
       ON sc.CATEGORY_ID = c.ID
WHERE c.title IN (@catTitle1, @catTitle2, @catTitle3...@catTitleN);

在这两个示例中,您将用您提供的数据替换 @,并调整 SELECT 部分以仅显示您需要的列。

如果要

从类别1和2中选择歌曲:

SELECT s.id song_id, s.title song_title, s.add_time song_add_time, c.id cat_id, c.title cat_title
FROM CATEGORIES c
INNER JOIN SONGS_CATEGORIES sg
ON c.id = sg.category_id
INNER JOIN SONGS s
ON sg.song_id = s.id
WHERE c.id = 1 OR c.id = 2

我想这就是你需要的

SELECT * -- select what ever columns you need to display
FROM   SONGS s
       JOIN SONGS_CATEGORIES sc
         ON s.ID = sc.SONG_ID
       JOIN CATEGORIES c
         ON c.ID = sc.CATEGORY_ID 
 where c.title in ('title1','title2')