新增总/子分类与曲目绑定;playlist 可按 categoryId 筛选并返回分类树; popadmin 支持行内改曲名/排序/上下架/会员开关与封面背景音频上传;文档同步。 Co-authored-by: Cursor <cursoragent@cursor.com>
83 lines
3.7 KiB
SQL
83 lines
3.7 KiB
SQL
-- 音乐总分类 / 子分类 + 曲目多对多。种子:首页 + 分类1/2/3;按 demo 曲名分配到子分类。
|
||
|
||
CREATE TABLE IF NOT EXISTS t_music_categories (
|
||
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '分类自增 id',
|
||
parent_id BIGINT NULL COMMENT 'NULL=总分类;非空=所属总分类 id',
|
||
name VARCHAR(128) NOT NULL DEFAULT '' COMMENT '分类名称(后台可改)',
|
||
sort_order INT NOT NULL DEFAULT 0 COMMENT '越小越靠前',
|
||
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=启用',
|
||
created_at DATETIME(3) NOT NULL COMMENT '创建时间',
|
||
updated_at DATETIME(3) NOT NULL COMMENT '更新时间',
|
||
KEY idx_music_cat_parent (parent_id, enabled, sort_order, id),
|
||
KEY idx_music_cat_name (name)
|
||
) COMMENT='音乐总分类与子分类';
|
||
|
||
CREATE TABLE IF NOT EXISTS t_music_category_tracks (
|
||
category_id BIGINT NOT NULL COMMENT '分类 id',
|
||
track_id BIGINT NOT NULL COMMENT '曲目 id',
|
||
created_at DATETIME(3) NOT NULL COMMENT '绑定时间',
|
||
PRIMARY KEY (category_id, track_id),
|
||
KEY idx_mct_track (track_id)
|
||
) COMMENT='曲目与分类多对多(同一曲可属多个分类)';
|
||
|
||
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
|
||
SELECT NULL, '首页', 0, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
|
||
FROM DUAL
|
||
WHERE NOT EXISTS (
|
||
SELECT 1 FROM t_music_categories WHERE parent_id IS NULL AND name = '首页'
|
||
);
|
||
|
||
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
|
||
SELECT p.id, '分类1', 1, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
|
||
FROM t_music_categories p
|
||
WHERE p.parent_id IS NULL AND p.name = '首页'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类1'
|
||
);
|
||
|
||
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
|
||
SELECT p.id, '分类2', 2, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
|
||
FROM t_music_categories p
|
||
WHERE p.parent_id IS NULL AND p.name = '首页'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类2'
|
||
);
|
||
|
||
INSERT INTO t_music_categories (parent_id, name, sort_order, enabled, created_at, updated_at)
|
||
SELECT p.id, '分类3', 3, 1, CURRENT_TIMESTAMP(3), CURRENT_TIMESTAMP(3)
|
||
FROM t_music_categories p
|
||
WHERE p.parent_id IS NULL AND p.name = '首页'
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM t_music_categories c WHERE c.parent_id = p.id AND c.name = '分类3'
|
||
);
|
||
|
||
INSERT INTO t_music_category_tracks (category_id, track_id, created_at)
|
||
SELECT c.id, t.id, CURRENT_TIMESTAMP(3)
|
||
FROM t_music_categories c
|
||
JOIN t_music_tracks t ON t.title IN ('晨光微风', '城市夜行', '雨巷漫步', '山间回响')
|
||
WHERE c.name = '分类1'
|
||
AND c.parent_id IS NOT NULL
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id
|
||
);
|
||
|
||
INSERT INTO t_music_category_tracks (category_id, track_id, created_at)
|
||
SELECT c.id, t.id, CURRENT_TIMESTAMP(3)
|
||
FROM t_music_categories c
|
||
JOIN t_music_tracks t ON t.title IN ('海边日落', '咖啡馆时光', '极光之夜', '纸飞机')
|
||
WHERE c.name = '分类2'
|
||
AND c.parent_id IS NOT NULL
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id
|
||
);
|
||
|
||
INSERT INTO t_music_category_tracks (category_id, track_id, created_at)
|
||
SELECT c.id, t.id, CURRENT_TIMESTAMP(3)
|
||
FROM t_music_categories c
|
||
JOIN t_music_tracks t ON t.title IN ('极光之夜', '星河入梦', '旅途序曲', '晨光微风')
|
||
WHERE c.name = '分类3'
|
||
AND c.parent_id IS NOT NULL
|
||
AND NOT EXISTS (
|
||
SELECT 1 FROM t_music_category_tracks x WHERE x.category_id = c.id AND x.track_id = t.id
|
||
);
|