如何从mysql过滤我的数据?

时间:2015-01-02 20:47:56

标签: php mysql sql filter

我们说我有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&# 39; s(0,1,2 ......)。我的sql查询应该是什么样子,如果我想能够选择多个类别,那么我需要查看表SONGS_CATEGORIES并获取所有选择了类别ID的songs_id,然后我从表SONGS获取带有这些id&的歌曲#39;?的

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

3 个答案:

答案 0 :(得分:1)

如果您想选择1类和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

答案 1 :(得分:1)

我想这就是你需要的东西

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')

答案 2 :(得分:1)

如果你已经知道你想要歌曲的类别的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部分​​以仅显示您需要的列。