我沒有想到會發現這很難,但我試圖在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似乎已經找到了最完美的解決方案(沒有測試它自己還沒有),但我正在寫一些東西,呼籲這個下次我會記得測試一下吧!
有沒有這樣的事情,像SQL中的數組 - 只有集合。不幸的是,你試圖無法工作 - mysql將用你的「數組」的內容替換@billtable_types作爲一個整體字符串,而不會將它視爲一組單獨的逗號分隔值。嘗試使用'FIND_IN_SET()'函數代替'IN'運算符。 – 2012-07-11 03:10:30