如何在播放列表中找到第一首歌? (单链表)

时间:2014-08-27 01:31:38

标签: mysql

我有一个存储播放列表的表格。它的定义非常简单,只有三列:

  • setID - 引用播放列表表格中的行的16位十六进制数
  • songID - 引用我歌曲表中一行的16位十六进制数
  • nextID - 包含下一个条目的songID的16位十六进制

这适用于在列表末尾添加新歌曲以及重新排列歌曲,但有没有办法让我查询此列表中列表中第一个元素的ID?又名没有nextID链接的那个?

目前我正在考虑将第一个songID存储在播放列表表格中,但如果可能的话,我想避免像这样混淆他们。

1 个答案:

答案 0 :(得分:0)

这是SQL数据库的糟糕数据结构。关系模型不能很好地处理显式链表。

相反,您应该拥有一个包含以下列的表:

  • SETID
  • songNumber
  • songID

并将它们存储在一张桌子中。

但问题的答案是:

select *
from playlist
where nextID is null;

但是,我会称之为 last ,而不是第一个。

编辑:

你可以得到第一个:

select *
from playlist pl
where not exists (select 1 from playlist pl2 where pl2.nextid = pl.id and pl2.setId = pl.setId);