有效地查找记录子集以及总计数

Jos*_*osh 5 sql oracle coldfusion

我在ColdFusion中编写一个函数,它返回与用户输入匹配的前几个记录,以及整个数据库中匹配记录的总数.该功能将用于提供自动完成功能,因此速度/效率是其最关注的问题.例如,如果函数接收输入"bl",则可能返回{sampleMatches:["blue", "blade", "blunt"], totalMatches:5000}

我尝试在单个查询中执行此操作以实现速度目的,最终得到的内容如下所示:

select record, count(*) over ()
from table
where criteria like :criteria
and rownum <= :desiredCount
Run Code Online (Sandbox Code Playgroud)

此解决方案的问题是count(*) over ()始终返回值:desiredCount.我在这里看到了一个类似的问题,但是我的应用程序无权创建临时表.那么有一种方法可以在一个查询中解决我的问题吗?有没有更好的方法来解决它?谢谢!

Lie*_*ers 5

我正在写这篇文章,所以你绝对不得不花时间,但我相信使用以下CTE

  • 只需要你写一次条件
  • 仅返回您指定的记录数量
  • 具有添加到每条记录的正确总计数
  • 并且只评估一次

SQL语句

WITH q AS (
  SELECT record
  FROM   table
  WHERE  criteria like :criteria
)
SELECT q1.*, q2.*
FROM   q q1
       CROSS JOIN (
         SELECT COUNT(*) FROM q
       ) q2
WHERE  rownum <= :desiredCount
Run Code Online (Sandbox Code Playgroud)