我如何从mysql中过滤我的数据?
How can i filter my data from mysql?
假设我有 3 tables:
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 查询应该是什么样子,如果我希望能够 select 多个类别,那么我需要查看 table SONGS_CATEGORIES 并获取所有 songs_id 使用类别 ID 我 selected,然后我从 table SONGS 中获取带有这些 ID 的歌曲?
希望我解释得很好,英语不是我的母语。
如果您想 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')
如果您已经知道您想要的歌曲类别的 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 部分以仅显示您需要的列。
假设我有 3 tables:
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 查询应该是什么样子,如果我希望能够 select 多个类别,那么我需要查看 table SONGS_CATEGORIES 并获取所有 songs_id 使用类别 ID 我 selected,然后我从 table SONGS 中获取带有这些 ID 的歌曲?
希望我解释得很好,英语不是我的母语。
如果您想 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')
如果您已经知道您想要的歌曲类别的 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 部分以仅显示您需要的列。