【问题标题】:Most efficient way to calculate affected rows with a limit计算有限制的受影响行的最有效方法
【发布时间】:2014-06-14 10:00:40
【问题描述】:

我的表中有 result 列,我想知道有多少行受到影响,其中 result 在特定 id 之前的最后 25 行中包含特定数字(如“3”)。

例如:想知道在id“500”之前的 25 行中有多少行有 result = 3。

在 PHP 和 MySQL 中实现这一目标的最有效方法是什么。

【问题讨论】:

  • before a specific id 是什么意思?
  • 我已经编辑了我的帖子
  • 不要使用 cmets,而是添加您正在使用的、有效且您想要优化的代码。至少我们能理解你在问什么,因为问题本身不是很清楚。

标签: php mysql


【解决方案1】:

您可以使用 SQL 完全做到这一点:

SELECT COUNT(x.result)
FROM (
   SELECT    *
   FROM      table
   WHERE     id < 500
   ORDER BY  id DESC
   LIMIT 25
) x
WHERE  x.result = 3

首先,您通过指定搜索条件来查找与您的查询相关的所有条目。然后将此搜索限制为 25 个项目并以相反的顺序对其进行排序。这应该产生最后 25 个元素。最后,您只需为结果值为 3 的项目执行COUNT()

【讨论】:

  • 此查询将影响给定id之前的所有行
  • 想知道有多少行有结果 = id "500" 之前的 25 行中的 3 行
  • 为这样的问题提供一个示例可能是个好主意。无论如何......我改变了我的答案,看看这是否更适合你。
  • 郑重声明:我正在寻找最有效的解决方案。我已经解决了这个难题。
  • 郑重声明:你在这里没有交到任何朋友。你把我们的时间浪费在你奇怪的游戏上,谎报你的实际情况。如果您希望人们帮助您,请诚实。我在这里完成了。您的“优化”看起来不错。
【解决方案2】:
SELECT COUNT(result)
FROM   table
WHERE  id < '$specificID'
  AND  result = 3
ORDER BY id DESC
LIMIT 25

【讨论】:

  • 此查询将始终返回 25,因为您的选择仅包含结果包含 3 的行。
【解决方案3】:

试试这个

SELECT count(*) FROM `your_table` 
WHERE result LIKE '%3%' 
AND id < 500
ORDER BY id ASC
LIMIT 25;

【讨论】:

  • 这将始终返回 25,因为您将行限制在我想知道的结果上;-)
  • 不要因为你没有解释清楚就给别人投票。他们正在尽最大努力帮助你。不要这么忘恩负义
  • @YourCommonSense 解释一下
  • @ArekvanSchaijk : 这是like '3' in the last 25 rowsresult = 3 of the 25 rows 这个完全不同的一个。
  • @Ranjith 看起来你在浪费时间帮助并最终被否决。这确实令人沮丧!
猜你喜欢
  • 2014-01-14
  • 2011-03-22
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多