0

このような準備ステートメントを書きましたが、正常に動作しています。

BEGIN
SET @tempaccountID :=CONCAT('\'',accountID1,'\'');
SET @tempdeviceID := CONCAT('\'',deviceID1,'\'');
SET @query :=CONCAT('select accountID, 
            deviceID, 
            FROM_UNIXTIME(timestamp) as timestamp, 
            statusCode, 
            latitude, 
            longitude, 
            speedKPH, 
            heading, 
            address, 
            odometerKM,
            Charging
            from ',(SELECT eventtableName FROM  migration_run_time WHERE accountID=accountId1 AND deviceID=deviceID1),
            ' where accountID=',@tempaccountID,
            ' and deviceID=',@tempdeviceID,
            ' and latitude!=0.0 and longitude!=0.0  and speedKPH<120 and timestamp= (select max(timestamp) from ', (SELECT eventtableName FROM  migration_run_time WHERE accountID=accountId1 AND deviceID=deviceID1) ,
                                                ' where accountID=',@tempaccountID,
                                                ' and deviceID=',@tempdeviceID,
                                                ' and latitude!=0.0  and longitude!=0.0 and speedKPH<120);');


PREPARE stmt FROM @query;
EXECUTE stmt;

今、大きな問題に直面しています

ステートメントで Convert_tz を使用して、このような必要な時間形式で時間を取得したい

convert_tz(FROM_UNIXTIME(timestamp),device.timeZone,device.requiredTimeZone) as timestamp

// デバイスは上記のステートメントの別のテーブルです

上記の方法でこれを記述する場合、列名の先頭にテーブル名を付ける必要がありますが、イベント テーブル自体は実行時に accountID と deviceID に基づいて計算されます。

ITはどうすればいいの...

PS 私は mysql がかなり苦手です。私は >net/jQuery 開発者であり、mysql についてのアイデアがありません。助けてください.. :(

4

2 に答える 2

1

答えるつもりだった

通常、このような問題はエイリアスを使用して解決されます。実際のテーブル名の後ろに別の名前を書き、別名でテーブルを参照します。

しかし、最初にあなたの問題を誤解したと思います。

from 句で名前を付けずにテーブルから選択することはできません。次のようにする必要があります。

SET @query :=CONCAT('
select accountID, 
deviceID, 
convert_tz(FROM_UNIXTIME(timestamp),device.timeZone,device.requiredTimeZone) as timestamp
statusCode, 
latitude, 
longitude, 
speedKPH, 
heading, 
address, 
odometerKM,
Charging
from ',(SELECT eventtableName FROM  migration_run_time WHERE accountID=accountId1 AND deviceID=deviceID1),
', device
 where accountID=',@tempaccountID,
' and deviceID=',@tempdeviceID,
' and latitude!=0.0 and longitude!=0.0  and speedKPH<120 and timestamp= (select max(timestamp) from ', (SELECT eventtableName FROM  migration_run_time WHERE accountID=accountId1 AND deviceID=deviceID1) ,
' where accountID=',@tempaccountID,
' and deviceID=',@tempdeviceID,
' and latitude!=0.0  and longitude!=0.0 and speedKPH<120)
and device.deviceID=deviceID1
;');

あなたのデバイステーブルがどのように見えるか分からないので、これは単なる推測です。

于 2013-04-08T08:52:04.060 に答える