【发布时间】:2013-04-26 12:26:30
【问题描述】:
我有某个对象处理通用 HTML 表的某些查询。这些查询只是带有子查询、聚合等的普通 SELECT。
在当前情况下,应用程序计算查询将给出的结果数,以启用(自动)分页:
1. SELECT COUNT(*) FROM (SELECT this, that, SUM(foo), COUNT(bar) FROM b WHERE x = y)
然后一些对象处理并添加分页等。表被相同的查询 + 一个 LIMIT 子句填充:
2. SELECT this, that, SUM(foo), COUNT(bar) FROM b WHERE x = y LIMIT n
但是那个计数查询(如下图 1 所示)很慢,所以我想用这个替换它:
3. SELECT COUNT(*) FROM b WHERE x = y this, that, SUM(foo), COUNT(bar) 替换为 COUNT(*)。
问题是:当我使用子查询时,如何有效地替换 SELECT 和 FROM 之间的所有内容而不会搞砸?我可以用正则表达式做到这一点吗?还有其他方法吗?
查询每次都不同。它是一个执行 2 个查询的通用处理程序:1 个计数查询,1 个用于表中的数据。我正在尝试找到一个通用的解决方案来削减第一个 SELECT 与其对应的 FROM 之间的所有内容。
【问题讨论】:
-
您的子查询是否总是只包含您从中查询的一个表?
-
不,大多数查询使用 JOIN