Non mi aspettavo di trovarlo così difficile, ma sto cercando di impostare una variabile utente in MySQL per contenere una matrice di valori. Non ho idea di come farlo, quindi ho cercato di fare qualche ricerca ed è stato abbastanza sorpreso di non trovare risposta. Ho provato:come impostare un array come variabile utente mysql
SET @billable_types = ['client1','client2','client3'];
Il motivo vorrei utilizzare la variabile nella seguente dichiarazione in seguito:
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;
sarei molto grato per l'aiuto.
Fast forward di un po ', ho finito con la seguente soluzione rapida e sporca, che non mi dà la flessibilità di riutilizzare la matrice in altre parti del codice, ma hey è un compito amministratore unchargeable così ho don voglio passare più tempo su di esso.
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 sembra aver trovato la soluzione più elegante (non ancora testato io stesso) ma la prossima volta sto scrivendo qualcosa che chiede per questo mi ricorderò di provarlo!
non c'è niente come matrici in SQL - ci sono solo set. Sfortunatamente, ciò che stai cercando non funziona: mysql sostituirà @billtable_types con il contenuto del tuo "array" come una singola stringa monolitica e non lo considererà come un insieme di valori separati da virgola. Prova a utilizzare la funzione 'FIND_IN_SET()' invece dell'operatore 'IN'. –