我可以要求MySQL进行“双重”搜索吗?

时间:2012-12-23 10:00:32

标签: mysql sql

我想知道是否有可能让MySQL做“双重搜索”;我真的不知道如何说得好,所以这是一个例子:

我有一张歌曲信息表(标题,专辑等等)。我想获得专辑中的下一首歌。我有当前歌曲的ID。目前我获取行,检查专辑和跟踪字段,然后根据专辑字段执行另一个MySQL查询,并检查当前跟踪之后是否还有其他跟踪。

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

由于我真的不知道这是否可行或如何描述它,我在Stack Overflow上找不到任何有用的东西,很抱歉,如果已经有类似的话。

3 个答案:

答案 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在解释复杂查询方面存在困难并且容易使事情变得更糟。