No esperaba encontrar esto tan difícil, pero estoy tratando de establecer una variable de usuario en MySQL para contener una matriz de valores. No tengo ni idea de cómo hacer esto, así que intenté investigar un poco y quedé bastante sorprendido de no encontrar respuesta. He tratado:cómo establecer una matriz como una variable de usuario de mysql
SET @billable_types = ['client1','client2','client3'];
La razón es que me gustaría utilizar la variable en la siguiente declaración más adelante:
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;
estaría muy agradecido por la ayuda.
avance rápido de un tiempo, que terminó con la siguiente solución rápida y sucia, que no me da la flexibilidad de la reutilización de la matriz en otras partes del código, pero oye, una tarea de administración cargarse más así que Don No quiero pasar más tiempo en eso.
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 parece haber encontrado la solución más elegante (no probado yo mismo todavía) pero la próxima vez que estoy escribiendo algo que llama a esto voy a recordar para probarlo!
no existen los arrays en SQL, solo hay conjuntos. Desafortunadamente, lo que intentas no funciona: mysql reemplazará @billtable_types con el contenido de tu "matriz" como una única cadena monolítica, y no lo considerará como un conjunto de valores separados por comas separados. Intenta usar la función 'FIND_IN_SET()' en lugar del operador 'IN'. –