как установить массив в качестве пользовательской переменной mysql

Я не ожидал, что это будет так сложно, но я пытаюсь установить пользовательскую переменную в 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, кажется, нашел самое элегантное решение (сам еще не проверял его ), но в следующий раз, когда я буду писать что-то, что требует этого, я не забуду проверить это!

8
задан Chris B 9 May 2014 в 05:35
поделиться