2013-04-26 1 views
1

일반 HTML 테이블에 대한 특정 쿼리를 처리하는 특정 개체가 있습니다. 이러한 쿼리 그냥 일반 등 하위 쿼리와 건의 SELECT 집계, 현재의 상황에서SELECT와 FROM 사이의 모든 내용 바꾸기

있으며, 응용 프로그램이 결과의 수 쿼리 수 있도록, 줄 것를 계산 (자동) 페이지 매김 :

1. SELECT COUNT(*) FROM (SELECT this, that, SUM(foo), COUNT(bar) FROM b WHERE x = y)

2. SELECT this, that, SUM(foo), COUNT(bar) FROM b WHERE x = y LIMIT n

하지만 카운트 Q : 그럼 어떤 오브젝트 프로세스와 테이블이 같은 쿼리 + A LIMIT 절을 채워집니다 매김 등 추가 uery (1에서와 같이) 매우 느린, 그래서 난이 사용하는 것으로 대체 싶어 :

3. SELECT COUNT(*) FROM b WHERE x = y <을 - 1 & 2에서 쿼리를,하지만 난 COUNT(*)this, that, SUM(foo), COUNT(bar)을 교체했다.

질문 : 하위 쿼리를 사용할 때 SELECT와 FROM 사이의 모든 것을 효과적으로 교체 할 수 있습니까? 정규식으로이 작업을 수행 할 수 있습니까? 다른 방법이 있습니까?

쿼리는 매번 다릅니다. 이것은 2 개의 쿼리를 실행하는 제네릭 처리기입니다 : 1 카운트 쿼리, 그리고 테이블의 데이터에 대해 1입니다. 첫 번째 SELECT과 그에 해당하는 FROM 사이의 모든 것을 자르기위한 일반 솔루션을 찾으려고합니다.

+0

이 하위 쿼리는 항상에서 질의하고 하나 개의 테이블을 포함 할 것인가? –

+0

아니요, 대부분의 쿼리는 JOIN을 사용합니다. – Sherlock

답변

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