次のタイプのログイン/ログアウトデータを含むテーブルがあります。1日あたりの労働時間のレポートを作成しようとしています。私が最初に解読できなかったのは、mysqlのユーザーのログイン/ログインペアと、名前、日付、タイムスパンを含む配列を選択することです。
したがって、私が見ているクエリの場合:
SELECT * FROM timestamps
WHERE name = $namevar
次に、ペアを選択して一緒に追加するためにクエリに何を追加しますか?
データ例:(SQLFiddle)
id | date_time | field1 | field2 | firstname | in_out | special
VARCHAR(3) | DATETIME | varchar(255) | varchar(255) | varchar(255) | varchar(255) | varchar(255)
-----------+---------------------+--------------+--------------+--------------+--------------+-------------
104 | 2012-06-11 17:14:43 | 2 | 1 | Joshua W | O | 0
106 | 2012-06-11 17:15:32 | 2 | 1 | Zedfried | O | 0
215 | 2012-06-11 18:12:14 | 2 | 1 | Chris No | O | 0
237 | 2012-06-11 18:13:32 | 2 | 1 | Craig St | O | 0
237 | 2012-06-12 06:49:05 | 2 | 1 | Craig St | I | 0
026 | 2012-06-12 06:50:32 | 2 | 1 | Renaldo | I | 0
079 | 2012-06-12 06:50:44 | 2 | 1 | Herman A | I | 0
104 | 2012-06-12 06:52:44 | 2 | 1 | Joshua W | I | 0
079 | 2012-06-12 12:28:46 | 2 | 1 | Herman A | O | 0
079 | 2012-06-12 12:28:53 | 2 | 1 | Herman A | I | 0
104 | 2012-06-12 12:32:51 | 2 | 1 | Joshua W | O | 0
104 | 2012-06-12 12:32:59 | 2 | 1 | Joshua W | I | 0
079 | 2012-06-12 18:19:57 | 2 | 1 | Herman A | O | 0
104 | 2012-06-12 22:12:25 | 2 | 1 | Joshua W | O | 0
237 | 2012-06-12 22:12:57 | 2 | 1 | Craig St | O | 0
079 | 2012-06-13 06:47:21 | 2 | 1 | Herman A | I | 0
最終報告書は次のようになります
Emp Code Name Sun Mon Tues Wed Thurs Fri Sat Total
x 2 std OT1 std OT1 Std OT1 std OT1 std OT1 Std OT1 std OT1 OT 2 Grand
AE0001 B SKAKANE 2.25 0 8.75 3 8.75 3 8.75 3 8.75 2 5.00 2 8.75 40.00 21.75 2.25 64.00
AE006 J MTOLO 8.75 8.75 1 8.75 8.75 1 5.00 5 40.00 7.00 - 47.00
AE007 B ZACA 8.75 1 8.75 2 8.75 2 8.75 2 35.00 7.00 - 42.00
AE0013 C NEHUMBA 8.75 8.75 8.75 1 8.75 5.00 2 40.00 3.00 - 43.00
アップデート:
http://sqlfiddle.com/#!2/fabb5/2/1
このソリューションは、上記のmysqlフィドルでは機能しますが、私のプログラムでは機能しません。
$query = $this -> db -> query('
set @num := 0, @in_out := \'\';
select emp_in.id,
emp_in.in_time,
emp_out.out_time
from
(
select id, in_out, date_time in_time,
@num := if(@in_out = in_out, @num + 1, 1) as row_number,
@in_out := in_out as dummy
from fingerevent
where in_out = \'I\'
order by date_time, id
) emp_in
join
(
select id, in_out, date_time out_time,
@num := if(@in_out = in_out, @num + 1, 1) as row_number,
@in_out := in_out as dummy
from fingerevent
where in_out = \'O\'
order by date_time, id
) emp_out
on emp_in.id = emp_out.id
and emp_in.row_number = emp_out.row_number
order by emp_in.id, emp_in.in_time
');
エラー:
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select emp_in.id, emp_in.in_time, emp_out.out_time from ( select id,' at line 3
質問が明確であることを願っています。私が片付けることができるものは何でも、私に知らせてください。