1

所以我想知道是否有人知道或大致了解如何对播放列表的返回查询进行排序,我将 NEXT_ID 和 PREVIOUS_ID 与 SONG_ID 保存在同一个表中

表结构:

PLAYLIST_SONG_ID PK,
PLAYLIST_ID,
SONG_ID,
SONG_NAME,
ARTIST,
PREVIOUS_PLAYLIST_SONG_ID FK TO PLAYLIST_SONG_ID ,
NEXT_PLAYLIST_SONG_ID FK TO PLAYLIST_SONG_ID

我想把NULL作为播放列表开始和结束的标志。此外,如果有人对如何构建表格有更好的想法,也将不胜感激。

谢谢

编辑:那么,有没有人可以提供所需查询的示例?

4

2 回答 2

0

您可以使用类似 PLAYLIST_POSITION 列并按该列排序。这应该比下一个/上一个更容易处理。只需将 position + 1 用作下一个,将 position - 1 用作上一个。

于 2013-06-28T12:04:57.553 回答
0

NULL会起作用,但它有点容易出错,因为很有可能 NULL 条目可能会因为不需要的原因最终出现在你的决赛桌中,然后这将被解释为播放列表结束,这可能不是你想要的,因为它可能会产生更难检测的错误。我个人会使用-1而不是NULL表示我的播放列表开始和停止的位置。我在这里假设您的 id 值和整数这样可以正常工作。

首选的原因-1是因为您必须-1每次都明确设置播放列表的开始和停止。您可以放心,某些类型的错误很难随机放置-1在选定的行上,比NULL. 此外,mysql 中的 int 类型总是从1(默认情况下,它不会阻止你做奇怪的事情)开始,所以负数不会是组成你的表的任何 id 值。这意味着您永远不必担心-1作为 id 的位置,您可以放心地确定它始终是播放列表的开始或结束。

编辑:但是要真正解决您的问题,一种方法是包含另一个表,您可以将其加入您的歌曲表。此附加表将顺序映射到播放列表的歌曲,因此它是多对多连接表。它可以具有以下表结构。

CREATE TABLE IF NOT EXISTS `songs_orders` (
    id int NOT NULL AUTO_INCREMENT,
    song_id int,
    order_id int,
    PRIMARY KEY(id)
);
于 2013-06-28T12:05:34.957 回答