Nie spodziewałem się, że to będzie tak trudne, ale próbuję ustawić zmienną użytkownika w MySQL, aby zawierała tablicę wartości. Nie mam pojęcia, jak to zrobić, więc próbowałem robić badania i byłem zaskoczony, że nie znajduję odpowiedzi. Próbowałem:jak ustawić tablicę jako zmienną użytkownika mysql
SET @billable_types = ['client1','client2','client3'];
Powodem jest chciałbym użyć zmiennej w następującym stwierdzeniem później:
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;
byłby bardzo wdzięczny za pomoc.
Przewijanie do przodu jakiś czas, skończyło się z poniższym szybki i brudny roztwór, który nie daje mi elastyczność ponownego wykorzystania tablicę gdzie indziej w kodzie, ale hej, to jest unchargeable zadaniem administratora więc don nie chcę spędzać więcej czasu na tym.
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 wydaje się znaleźć najbardziej eleganckie rozwiązanie (nie testowałem to sobie jeszcze), ale następnym razem, gdy piszę coś, co wywołuje za to będę pamiętał go przetestować!
W SQL nie ma czegoś takiego jak tablice - są tylko zestawy. Niestety, to, co próbujesz, nie działa - mysql zastąpi @billtable_types zawartością twojej "tablicy" jako pojedynczym ciągiem monolitycznym i nie potraktuje jej jako zestawu oddzielnych wartości rozdzielanych przecinkami. Spróbuj użyć funkcji 'FIND_IN_SET()' zamiast operatora 'IN'. –