0

ORDER と LIMIT を SQL クエリに含めることに問題があります。

$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){

上記のスクリプトは正常に動作しています。しかし、データの数を制限したい (すべてのテーブルの最後の 1 つだけが必要です)。私はそれをやってみます

ORDER BY date_time DESC LIMIT 0,1

sprintf クエリでは動作しますが、動作したくありません。ORDER ectを追加すると。私は答えを持っています

致命的なエラー: "while (($row_5_2 ..."

誰でも助けることができますか?

4

1 に答える 1

1

コードを見ると、おそらく次のエラーが発生している可能性が高いようです (ただし、これを確認してください)。

UNION と ORDER BY の不適切な使用

もしそうなら、それは括弧が抜けているからです。UNIONのマニュアルを参照してください。

個々の SELECT に ORDER BY または LIMIT を適用するには、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);
于 2012-05-01T22:20:04.187 に答える