1

我有某个对象处理通用 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<-- 来自 1 和 2 的查询,但我this, that, SUM(foo), COUNT(bar)COUNT(*).

问题是:当我使用子查询时,如何有效地替换 SELECT 和 FROM 之间的所有内容而不会搞砸?我可以用正则表达式做到这一点吗?还有其他方法吗?

查询每次都不同。它是一个执行 2 个查询的通用处理程序:1 个计数查询和 1 个用于表中数据的查询。我正在尝试找到一个通用的解决方案来削减第一个SELECT与其对应的FROM.

4

1 回答 1

1

我试图做以下事情。我希望它有所帮助。

<?php
$new = "source,destination";

$source = "SELECT t.id , t.name, t.number from tbl_tttt t";

$start = 'select ';
$end = ' from';

$data = preg_replace('#('.preg_quote($start).')(.*)('.preg_quote($end).')#si', '$1'.$new.'$3', $source);


    echo $data;

?>

然后查询变为:

SELECT source,destination from tbl_tttt t
于 2015-02-02T13:45:27.260 回答