私は、ユーザー旅行時間の3時間前にチケットを生成するためのイベントスケジューラをMysqlに作成しています。 Myslは、サーバ時間がUTCで、IST時間との5時30分の時間を持つ12時間形式のサーバにインストールされます。旅行時間が朝7時30分の1人のユーザーがいるので、朝4時半にこのユーザー用のチケットを生成する必要があります。現在のサーバー時間を取得してISTに変換し、移動時間と現在の変換時間差を比較するのは3時間です。しかし、午前10時に失敗して常にチケットがどのように作成されているのか。以下は、MySQLの、Mysqlを使用してUTCの12時間形式をインディアン時刻に変換する
DELIMITER $$
ALTER EVENT `Auto_Generated_Ticket` ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP ON COMPLETION PRESERVE ENABLE DO BEGIN
DECLARE UserId INT;
DECLARE v_finished INT DEFAULT 0;
DECLARE GetDate DATE DEFAULT DATE(NOW());
/*get all active user's who's tariff enddate is > today and available journeys > 0 and pass-status=4(delivered)*/
DECLARE ActiveUserId CURSOR FOR
SELECT UT.user_id FROM `um.user_trs.tariff` UT
INNER JOIN `um.user` U ON U.user_id=UT.user_id
INNER JOIN `um.user_ps.pass` UP ON UP.user_id=UT.user_id
INNER JOIN `ps.pass` P ON P.pass_id=UP.pass_id
WHERE UT.end_date >=DATE(NOW()) AND UT.available_journeys > 0 AND UT.current_balance>0 AND P.status_id=4
GROUP BY UT.user_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished=1;
SET @GetTime= DATE_FORMAT(NOW(),'%Y-%m-%d %h:%i:%s %p');
OPEN ActiveUserId;
get_userid:LOOP
FETCH ActiveUserId INTO UserId;
IF v_finished=1 THEN
LEAVE get_userid;
END IF;
SET @StartTime=(SELECT RS.start_time FROM `um.user_rm.route` UR
INNER JOIN `rm.route_schedule` RS ON RS.route_schedule_id=UR.route_schedule_id
WHERE UR.user_id=UserId
ORDER BY ABS(TIMEDIFF(RS.`start_time`, TIME(CONVERT_TZ(@GetTime,'+00:00','+05:30')))) LIMIT 1);
SET @TimeDiff=(HOUR(TIMEDIFF(@StartTime,TIME(CONVERT_TZ(@GetTime,'+00:00','+05:30')))));
/*if time difference between current time and schedule start time is 3 hours then generate ticket for the user for that particular schedule*/
IF (@TimeDiff =3) THEN
/*IF (@TNumber IS NULL) THEN*/
IF NOT EXISTS(SELECT ticket_number FROM `um.user_ts.ticket` WHERE [email protected] AND [email protected]
AND user_id=UserId AND DATE(date_of_issue)[email protected]) THEN
INSERT INTO `um.user_ts.ticket`
(
`user_id`,`route_id`,`route_schedule_id`,`ticket_number`,`date_of_issue`,`is_cancelled`,
`amount_charged`,`user_tariff_id`,`opening_balance`,`is_auto_generated`
)
VALUES
(
UserId,@RouteId,@RoutScheduleId,@TicketNumber,CONVERT_TZ(UTC_TIMESTAMP(),'+00:00','+05:30'),
FALSE,@PerJourneyCost,@UserTariffId,@TariffCurrentBalance,1
);
END IF;/*end of route and schedule check*/
END IF; /*end of time difference check*/
END LOOP get_userid;
CLOSE ActiveUserId;
END$$
DELIMITER ;
の私の完全なイベントwrittentである私は、時間または私は上記のクエリでは気付いていないですどんな間違いを変換する場合は、他の方法を教えてください。
よろしく サンギータ
[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を参照してください。 –