У меня странная проблема (я пытался найти предыдущие ответы, но ничего не смог найти).Я создал эту функцию:
CREATE DEFINER=`root`@`localhost` FUNCTION `CALCULATEDATE`(caller VARCHAR(4)) RETURNS date
BEGIN
DECLARE cur_day INT(2);
DECLARE cur_time INT(2);
DECLARE calculated_date DATE;
IF caller = 'HOME' THEN
SELECT DAY(CONVERT_TZ(NOW(),@@system_time_zone,'US/Pacific')) INTO cur_day;
SELECT HOUR(CONVERT_TZ(NOW(),@@system_time_zone,'US/Pacific')) INTO cur_time;
/*Case homepage */
IF cur_day = DAY(NOW()) THEN
IF cur_time < 7 THEN
/*return yesterdays date */
SET calculated_date = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
ELSE
/*return todays date */
SET calculated_date = CURDATE();
END IF;
ELSE
SET calculated_date = DATE(CONVERT_TZ(NOW(),@@system_time_zone,'US/Pacific'));
END IF;
ELSE
/*Case newsletter */
/*return todays date */
SET calculated_date = CURDATE();
END IF;
RETURN calculated_date;
END
, которая возвращает дату (на основе сравнения времени PST).
Я вызываю эту функцию из вида:
CREATE
ALGORITHM = UNDEFINED
DEFINER = `root`@`localhost`
SQL SECURITY DEFINER
VIEW `dd_vwfeatured` AS
(SELECT
`doms`.`id` AS `id`,
`doms`.`name` AS `name`
FROM
`myelements` `doms`
WHERE
`doms`.`id` IN (SELECT
`d`.`domainid`
FROM
(`daily_featured_picks` `d`
LEFT JOIN `daily_featured` `f` ON ((`d`.`featuredid` = `f`.`id`)))
WHERE
(`f`.`date` = CALCULATEDATE('NEWS')))
ORDER BY `doms`.`name`)
Функция прекрасно работает, если вызывается из запроса MySQL, но в представлении я всегда получаю все записи взамен.
Можете ли вы, ребята, помочь?
Спасибо, DT