【发布时间】:2020-07-21 05:10:41
【问题描述】:
我正在使用 wxpython 和 sqlite3 构建一个简单的歌曲管理器。
有以下表格
- 歌曲
- 文件
- 标签
- 播放列表
歌曲和文件具有一对一的关系。
歌曲和标签具有多对多关系。
歌曲和播放列表具有多对多关系。
您可以在下面看到我正在使用的表查询:
create_songs_table_query = """ CREATE TABLE IF NOT EXISTS songs (
song_id integer PRIMARY KEY AUTOINCREMENT,
title text NOT NULL,
artist text NOT NULL,
added_timestamp integer NOT NULL,
file_id INTEGER NULL,
FOREIGN KEY (file_id)
REFERENCES files (file_id)
ON DELETE CASCADE
); """
create_files_table_query = """ CREATE TABLE IF NOT EXISTS files (
file_id integer PRIMARY KEY AUTOINCREMENT,
filename text NULL,
size integer NULL,
song_id INTEGER NOT NULL,
FOREIGN KEY (song_id)
REFERENCES songs (song_id)
ON DELETE CASCADE
); """
create_tags_table_query = """CREATE TABLE IF NOT EXISTS tags (
tag_id integer PRIMARY KEY AUTOINCREMENT,
tag_text text NOT NULL,
tag_timestamp integer NULL,
); """
create_songs_tags_table_query = """CREATE TABLE IF NOT EXISTS songs_tags (
song_tag_id integer PRIMARY KEY AUTOINCREMENT,
song_id INTEGER NOT NULL,
FOREIGN KEY (song_id)
REFERENCES songs (song_id)
ON DELETE CASCADE,
tag_id INTEGER NOT NULL,
FOREIGN KEY (tag_id)
REFERENCES tags (tag_id)
ON DELETE CASCADE
); """
create_playlists_table_query = """CREATE TABLE IF NOT EXISTS playlists (
playlist_id integer PRIMARY KEY AUTOINCREMENT,
playlist_title text NOT NULL,
created_timestamp INTEGER NOT NULL,
updated_timestamp INTEGER NULL,
); """
create_songs_playlists__table_query = """CREATE TABLE IF NOT EXISTS songs_playlists (
song_playlist_id integer PRIMARY KEY AUTOINCREMENT,
song_id INTEGER NOT NULL,
FOREIGN KEY (song_id)
REFERENCES songs (song_id)
ON DELETE CASCADE,
playlist_id INTEGER NOT NULL,
FOREIGN KEY (playlist_id)
REFERENCES playlists (playlist_id)
ON DELETE CASCADE
); """
我正在尝试获取每个播放列表总共有多少首歌曲,包括任何播放列表是否有 0 首歌曲。
我使用以下查询似乎返回了所需的结果:
SELECT playlists.playlist_id, playlists.playlist_title, COUNT(songs.song_id) as total
FROM playlists
LEFT OUTER JOIN songs_playlists
ON playlists.playlist_id = songs_playlists.playlist_id
LEFT OUTER JOIN songs
ON songs_playlists.song_id = songs.song_id
GROUP BY (songs.song_id)
ORDER BY total DESC
虽然,我不确定它是否完全正确,或者是否有更简单或有效的方法。
【问题讨论】:
-
我这里使用的查询不起作用,我弄错了。
-
您的查询应该有效。问题是您的某些 CREATE 语句在语法上不正确
-
@forpas 你能详细说明正确的语法吗?
-
检查我的答案。
标签: python sql sqlite group-by count