2013-04-08 3 views
0

Я написал инструкцию для подготовки, как это, и работает нормально.Подготовка инструкции Подготовки в mysql и использование convert_tz в ней

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 

// устройство другой таблицу в приведенном выше заявление

Если я напишу это выше, мне придется префикс имен таблиц в fromt из имен coloumn, но сама таблица событий вычисляется во время выполнения на основа ACCOUNTID и DeviceId ..

как я должен это сделать ...

P.S. Я очень плохо разбираюсь в mysql .. Я разработчик> net/jQuery и не имею IDea о mysql. пожалуйста, помогите .. :(

ответ

0

Наконец нашел решение ... Я создал две переменные для этого @timeZone и @requiredTimeZone ..

поблагодарить вас @TOMBOM за помощь ...

DELIMITER $$ 

USE `hiddenFromSO`$$ 

DROP PROCEDURE IF EXISTS `getLastCoordinate`$$ 

CREATE DEFINER=`root`@`%` PROCEDURE `getLastCoordinate`(accountID1 VARCHAR(32), 
         deviceID1 VARCHAR(64)) 
BEGIN 
    SET @tempaccountID :=CONCAT('\'',accountID1,'\''); 
    SET @tempdeviceID := CONCAT('\'',deviceID1,'\''); 

    SET @timeZone=CONCAT('\'',(SELECT timeZOne FROM device WHERE deviceID=deviceID1 AND accountID=accountID1 AND isActive='1'),'\''); 

    SET @requiredTimeZone=CONCAT('\'',(SELECT requiredTimeZone FROM device WHERE deviceID=deviceID1 AND accountID=accountID1 AND isActive='1'),'\''); 

    SET @query :=CONCAT('select accountID, 
       deviceID, 
       convert_tz(FROM_UNIXTIME(timestamp),',@timeZone,',',@requiredTimeZone,') 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; 
    -- select @query; 
    EXECUTE stmt; 
    END$$ 

DELIMITER ; 
1

Я собирался ответить

Обычно такие проблемы решаются с помощью псевдонимов. Написать еще одно имя за фактическое имя таблицы и ссылки на таблицу с помощью псевдонима.

, но я думаю, что я неправильно понял вашу проблему первой

Вы не можете выбрать из таблицы, не называя его в из пункта Вы должны сделать что-то вроде этого:..

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 
;'); 

Это просто предположение, так как я не знаю, как выглядит ваш стол устройства.

+0

Спасибо за ответ .. Позвольте мне попробовать. :) – writeToBhuwan

+0

не работает .. Convert_tz возвращает нуль в этом случае. – writeToBhuwan

+0

Покажите мне таблицу. – fancyPants

Смежные вопросы