mysql - 计算前 100 行中的匹配项

标签 mysql

正如标题所述,我正在尝试计算某个表中最后 100 条记录中的匹配数。

此查询有效,但数据非常动态,在该特定表上有大量插入,并且正在运行类似的查询,它们最终都非常慢(20 秒),可能会相互阻塞。

因为缓存结果是 Not Acceptable (数据必须是实时的),我正在考虑将外部查询切换到 PHP,尽管我知道这会更慢,因为它仍然会快于 20 秒。

这是查询

SELECT count(*) as matches
FROM (
  SELECT first_name FROM customers
  WHERE division = 'some_division'
  AND type = 'employee'
  ORDER BY request_time DESC
  LIMIT 0, 100
) as entries
WHERE first_name = 'some_first_name_here'

我正在寻找一种更优化的方法来执行相同的任务,而不必在 PHP 中实现它,因为这是一种幼稚/明显错误的方法。

表格看起来像这样:

id first_name last_name type division request_time

为了澄清问题,由于保密协议(protocol)的原因,这显然不是实际的表/数据,但是,该表看起来与不同的列名称完全相同。

再说一次,我想要实现的是提取在最后 100 条有一些限制的记录中找到的匹配项的计数。

例如,

how many times does the name 'John' appear within the last 100 employees added in the HR division?

最佳答案

我明白了。

像这样的怎么样......

 SELECT i 
   FROM 
      ( SELECT CASE WHEN first_name = 'some_first_name_here' THEN @i:=@i+1 END i 
          FROM customers
         WHERE division = 'some_division'
           AND type = 'employee'
             , (SELECT @i:=0)val  
         ORDER 
            BY request_time 
          DESC        
         LIMIT 0,100
      ) n 
  ORDER 
     BY i DESC 
  LIMIT 1;

关于mysql - 计算前 100 行中的匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23540887/

相关文章:

PHP Mysql - 导出整个数据库

mysql - 如何在mysql表中多次重复一行?

mysql_row 从不兼容的指针类型返回赋值?在C中

php - 每个人显示一个按日期排序的结果

php - 变量在 PHP joomla 的 where 子句中不起作用

mysql - SQL Join涉及3张表,怎么办?

mysql - WHERE 对于不在两个日期之间的数据返回太多行

mysql - 根据 id 列的值将一个 sql 列转换为两列

mysql - 将从属实例连接到主实例 RDS MYSQL-Aurora 时出现问题

mysql - 为什么 GROUP BY on FULLTEXT INDEX 使用临时的?