我想知道是否有可能让MySQL做“双重搜索”;我真的不知道如何说得好,所以这是一个例子:
我有一张歌曲信息表(标题,专辑等等)。我想获得专辑中的下一首歌。我有当前歌曲的ID。目前我获取行,检查专辑和跟踪字段,然后根据专辑字段执行另一个MySQL查询,并检查当前跟踪之后是否还有其他跟踪。
我可以在一个查询中告诉MySQL我想要包含在我所拥有的id行中的所有专辑行吗?
由于我真的不知道这是否可行或如何描述它,我在Stack Overflow上找不到任何有用的东西,很抱歉,如果已经有类似的话。
答案 0 :(得分: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
答案 1 :(得分:2)
看起来你需要subqueries
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歌曲的相册中的所有歌曲)
答案 2 :(得分:0)
目前我获取行,检查专辑和跟踪字段,然后根据专辑字段执行另一个MySQL查询,并检查当前跟踪之后是否还有其他跟踪。
它有什么问题?是慢还是不方便,还是太复杂? 您是否有任何实际理由寻找其他解决方案?
我想知道是否可以让MySQL做“双重搜索”
即使有一个肯定的答案,并非所有“可能”的东西都值得实施。
您当前的设置简单明了,您可以自己维护 虽然每个提议的解决方案都很复杂,但需要更多的知识来维护并可能导致一些问题,因为Mysql在解释复杂查询方面存在困难并且容易使事情变得更糟。