替换SELECT和FROM之间的所有内容

时间:2013-04-26 12:26:30

标签: mysql sql regex

我有一个特定的对象处理通用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之间的所有内容。

1 个答案:

答案 0 :(得分: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