2013-04-26 70 views
1

我有一个处理通用HTML表的特定查询。这些查询与子查询只是普通的SELECT,聚集等替换SELECT和FROM之间的所有内容

在当前形势下,应用统计结果的查询将给予,使数(自动)分页:

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

但是,数q uery(下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之间的所有内容。

+0

将你的子查询始终包含你从查询只有一个表? – 2013-04-26 12:59:26

+0

不,大多数查询使用JOIN – Sherlock 2013-04-26 13:16:26

回答

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 
相关问题