0

我想知道这是否可以让 MySQL 进行“双重搜索”;我真的不知道怎么说好,所以这里有一个例子:

我有一张歌曲信息表(标题、专辑等...)。我想得到专辑中的下一首歌。我有当前歌曲的 ID。目前我得到了行,检查专辑和曲目字段,然后根据专辑字段进行另一个 MySQL 查询,并检查当前曲目之后是否还有另一首曲目。

我可以在一个查询中告诉 MySQL 我希望专辑的所有行都包含在我拥有的 id 行中吗?

因为我真的不知道这是否可能或如何描述它,所以我在 Stack Overflow 上没有找到任何有用的东西,如果已经有类似的东西,很抱歉。

4

3 回答 3

5

你可以使用 JOIN 来得到你想要的。假设您的表有一个链接到专辑的 ID,这样的东西可以用来获取当前正在收听的曲目之后的所有内容。

select *
  from songs a
  join songs b
    on a.album_id = b.album_id
 where a.song_id = 1 
   and b.song_id > a.song_id

显然,如果您想要专辑中的所有内容,请删除第二个条件。如果您想包含正在收听的曲目,请更改>>=.


您刚刚评论:

我应该提到它,但 id 与曲目的顺序无关,它只是表中的主键。

如果是这种情况,那么b.song_id > a.song_id可能是不正确的。你没有给我们你的完整模式,但我强烈建议你的songs表是否包含曲目应该播放的顺序,所以它看起来像(SONG_ID, ALBUM_ID, ALBUM_ORDER, ... more song level info ). 您的查询将变为:

select *
  from songs a
  join songs b
    on a.album_id = b.album_id
 where a.song_id = 1 
   and b.album_order > a.album_order
于 2012-12-23T10:04:36.303 回答
2

看起来你需要子查询

SELECT * FROM song_table WHERE album = 
    (SELECT album FROM song_table WHERE id = 12)

此查询获取与具有相同专辑的行共享同一专辑的所有行id = 12

如果您的子查询可能返回多于一行,您需要IN

SELECT * FROM song_table WHERE album IN 
    (SELECT album FROM song_table WHERE genre = "Techno")

此查询获取具有(专辑)包含专辑的所有行(genre = "Techno"包含(至少一首)Techno歌曲的任何专辑中的所有歌曲)

于 2012-12-23T10:03:17.160 回答
0

目前我得到了行,检查专辑和曲目字段,然后根据专辑字段进行另一个 MySQL 查询,并检查当前曲目之后是否还有另一首曲目。

它有什么问题?是慢,还是不方便,还是太复杂?
你有任何实际的理由去寻找另一种解决方案吗?

我想知道这是否可以让 MySQL 进行“双重搜索”

即使有一个肯定的答案,也不是所有“可能”的事情都值得实施。

您当前的设置简单明了,您可以自己维护。
虽然每个提议的解决方案都很复杂,但需要更多的知识来维护并且可能会导致一些问题,因为 Mysql 难以解释复杂的查询并且很容易使事情变得更糟。

于 2012-12-23T10:31:55.250 回答