Я не ожидал, что это будет так сложно, но я пытаюсь установить пользовательскую переменную в MySQL, чтобы она содержала массив значений.Я понятия не имею, как это сделать, поэтому попытался провести некоторое исследование и был очень удивлен, не найдя ответа. Я пробовал:
SET @billable_types = ['client1','client2','client3'];
Причина в том, что я хотел бы использовать переменную в следующем утверждении позже:
SELECT sum((time_to_sec(timediff(tlg.time_stop, tlg.time_start))/3600)) as billable_hours
from mod_tmlog_time_log tlg, mod_tmlog_task_list mttl
where date(tlg.time_start) >= @time_start
and date(tlg.time_stop) <= @time_stop
and mttl.type IN (@billable_types)
and tlg.task_id = mttl.id
group by start_date
order by start_date desc;
Был бы очень признателен за помощь.
Перенесемся немного вперед, я пришел к следующему быстрому и грязному решению, которое не дает мне гибкости повторного -использования массива в другом месте кода, но это неоплачиваемая задача администратора, поэтому я не хочу тратить больше времени на это.
SELECT WEEKDAY(tlg.time_start) AS day_of_week, date(tlg.time_start) as start_date,
sum((time_to_sec(timediff(tlg.time_stop, tlg.time_start))/3600)) as billable_hours
from mod_tmlog_time_log tlg, mod_tmlog_task_list mttl
where date(tlg.time_start) >= @time_start
and date(tlg.time_stop) <= @time_stop
and mttl.type IN ('c1','c2','c3')
and tlg.task_id = mttl.id
group by start_date
order by start_date desc;
joostschouten, кажется, нашел самое элегантное решение (сам еще не проверял его ), но в следующий раз, когда я буду писать что-то, что требует этого, я не забуду проверить это!