9

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

4

3 に答える 3

12

ここで答えを見つけました:MySQLで配列を循環させる方法は?

set @billable_types = 'client1,client2,client3';
select * from mttl where find_in_set(mttl.type, @billable_types);
于 2012-10-01T09:54:06.727 に答える