これがそれほど難しいとは思っていませんでしたが、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は最もエレガントな解決策を見つけたようです(まだ自分でテストしていません)が、次にこれを必要とする何かを書いているときは、それをテストすることを忘れないでください!