Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我能让MySQL做一个“测试”吗;“双”字;搜索_Mysql_Sql - Fatal编程技术网

我能让MySQL做一个“测试”吗;“双”字;搜索

我能让MySQL做一个“测试”吗;“双”字;搜索,mysql,sql,Mysql,Sql,我想知道这是否可以让MySQL进行“双重搜索”;我真的不知道该怎么说,所以这里有一个例子: 我有一个歌曲信息表(标题、专辑等…)。我想得到专辑中的下一首歌。我有当前歌曲的ID。当前我得到行,检查唱片集和曲目字段,然后根据唱片集字段进行另一个MySQL查询,检查当前曲目之后是否还有其他曲目 在一个查询中,我可以告诉MySQL,我希望专辑的所有行都包含在我拥有的id行中吗 因为我真的不知道这是否可能,也不知道如何描述它,所以我没有发现任何关于堆栈溢出的有用信息,如果已经有类似的信息,那么很抱歉。看起

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

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

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

因为我真的不知道这是否可能,也不知道如何描述它,所以我没有发现任何关于堆栈溢出的有用信息,如果已经有类似的信息,那么很抱歉。

看起来您需要

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

如果子查询可能返回多行,则在中需要

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

此查询获取包含(唱片集)的唱片集的所有行,其中(唱片集)包含
genre=“Techno”
(任何唱片集中包含(至少一首)Techno歌曲的所有歌曲)

您可以使用连接来获取所需内容。假设您的表有一个链接到相册的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\u id>a.song\u id
可能不正确。您尚未向我们提供完整的模式,但我强烈建议您的
歌曲
表是否包含播放曲目的顺序,因此它看起来像
(歌曲ID、专辑ID、专辑顺序,…更多歌曲级别信息)
。您的查询将变成:

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
当前我得到行,检查唱片集和曲目字段,然后根据唱片集字段进行另一个MySQL查询,检查当前曲目之后是否还有其他曲目

有什么问题吗?它是缓慢的、不方便的还是过于复杂的?
你有什么实际的理由去寻找另一个解决方案吗

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

即使有肯定的答案,也不是所有“可能”的东西都值得实施

您当前的设置简单明了,您可以自己维护。

虽然每个建议的解决方案都很复杂,但需要更多的知识来维护,并且可能会导致一些问题,因为Mysql在解释复杂的查询时有困难,并且很容易使事情变得更糟。

非常模糊的描述,自然会导致下面许多不同类型的答案。你到底想达到什么目的?您有一个ID,您想获取该ID和所有后续(下一个)ID的记录吗?如果是这样,你可以很容易地使用
WHERE id>给定id
语法,但问题仍然不够具体。这是不公平的@holodoc,OPs的母语不是英语,我认为他们很好地沟通了他们想要的东西。这两个答案在功能上是等价的,因为在SQL中通常有许多方法可以做相同的事情。这也不是OP的反映。@holodoc,我应该提到它,但id与曲目顺序无关,它只是表中的主键。但我完全同意我可以说得更具体一些,但就像本说的,我的母语不是英语,我很难解释清楚,我很抱歉that@Ben我的评论哪一部分是“不公平的”?o_o我刚才说,这个问题的表述方式给OP的实际需求留下了太多的猜测空间。不多不少。至于语言部分,英语也远不是我的母语,但我看不出这部分与讨论有什么关系。因为我看到的(只是看了一些文档)JOIN似乎比子查询更强大,但是你知道哪一个在速度和服务器负载方面更有效吗?你可能想看看他们在@eephyne做不同的事情。确保的唯一方法是在您自己的环境中进行测试。如果它们的速度差不多(而且很可能会是),那么使用你最了解的东西。经过更多的挖掘和测试,join似乎不是我所需要的,因为两个表是相同的,join合并了它们,我得到了X行,每列两次,我觉得它不太可读。但我后来学习了join的实用性,当然也使用了id,谢谢:pwell,最后因为我使用它们时至少需要四个子查询,速度非常慢,所以我搜索了如何使用join删除重复项。我发现这只需将SELECT*替换为SELECT b*。JOIN肯定会为我做得更好,谢谢你,最好在客户端执行两个查询并处理它们,而不是只对mysql服务器执行一个复杂的查询?我同意维护代码的简单性,但就服务器负载而言,这样更好吗?
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