2012-05-01 5 views
0

SQL 쿼리에 ORDER 및 LIMIT 포함 문제가 있습니다.ORDER, LIMIT 및 sprintf를 사용하여 쿼리

$STH_1 = $DBH_R->query("SELECT table_name       
         FROM information_schema.tables       
         WHERE table_name       
         LIKE 'v_c_ei\_9%' 
         "); 
$stmts_1 = array(); 

//echo "date = ".  $date."<br>";         // $date is today date 
$date_60 = date('Y-m-d', strtotime('-60 day', strtotime($date)));  // $date_60 = today - 60 days 


while (($row_1 = $STH_1 -> fetch_assoc()) !== null){ 

$table_name = $row_1['table_name']; 
$stmts_1[] = sprintf("SELECT * 
         FROM $table_name 
         WHERE (date_time >= '$date_60') AND (ei_code = '1117')  
        ");  
} 

// at this place I need help, I think. I have few data from every query but I want to reduce the number of solutions to 1 per table 

$stmt_1 = implode("\nUNION\n", $stmts_1); 
$stmt_1 .= "\nORDER BY date_time ASC";  
$STH_5_2 = $DBH_R->query($stmt_1);   
while (($row_5_2 = $STH_5_2 -> fetch_assoc()) !== null){ 

위의 스크립트가 정상적으로 작동합니다. 하지만 데이터 수를 제한하고 싶습니다 (모든 테이블에서 마지막으로 필요합니다). 나는 sprintf 쿼리에서

ORDER BY date_time DESC LIMIT 0,1 

을 통해 시도하지만 작동하지 않으려 고합니다. ORDER 요법을 추가 할 때. 나는 대답을 가지고있다

Fatal error: Call to a member function fetch_assoc() on a non-object in "while (($row_5_2 ..."

누구든지 도움을받을 수 있습니까?

+1

sprintf 쿼리를 통해 코드를 시도 할 때 코드의 모양이 정확히 어떻게 나타 납니까? mysql에서 오류를 확인 했습니까? –

+0

@MarkByers 그가 mysqli를 사용하는 것처럼 보이지는 않을 것입니다. 'echo $ DBH_R-> error; 시도하십시오. –

답변

1

코드를 보면 당신은 아마 다음과 같은 오류를 얻고있는 것으로 보인다 (그러나 확실하게이를 확인하시기 바랍니다) :

 
Incorrect usage of UNION and ORDER BY 

그렇다면, 당신은 괄호를 누락 있기 때문에입니다. UNION의 설명서를 참조하십시오.

To apply ORDER BY or LIMIT to an individual SELECT, place the clause inside the parentheses that enclose the SELECT:

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) 
UNION 
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10); 
+0

이 부분은 UNION과 ORDER로 작동합니다. 나는 UNION 이전에 수신 데이터를 선택해야하며, sprintf 쿼리 내에서 ORDER를 사용하여이 작업을 수행하려고합니다.이 ORDER는 작동하지 않으려 고합니다. ( – Andrew

+0

대답은 오히려 간단합니다 -> ORDER BY 결코 마크 - 이론적으로 당신의 솔루션은 괜찮지 만이 문제는 아닙니다 - 우리는 얼마나 많은 테이블을 가지고 있는지 알지 못합니다 - 첫 번째 쿼리에서 반드시 필요합니다 ... – Andrew

+0

마크, 도움을 청합니다 ...하지만 저는 때로는 새로운 의사가 더 좋을 수도 있습니다 ... – Andrew