チェックインおよびチェックアウト機能を備えた単純な PHP および MySQL プロジェクトに取り組んでいます。
単一のテーブルで行をマージする際に少し問題があります。以下は、行をマージせずに表示できる生データです。
mysql> SELECT * FROM clock; +--------+---------+---------------------+----------+ | log_id | user_id | xtimestamp | text | +--------+---------+---------------------+----------+ | 1 | 1000 | 2012-05-10 07:47:06 | CHECKIN | | 2 | 1003 | 2012-05-10 07:47:23 | CHECKIN | | 3 | 1002 | 2012-05-10 07:47:36 | CHECKIN | | 4 | 1002 | 2012-05-10 07:47:49 | CHECKOUT | | 5 | 1003 | 2012-05-10 07:48:11 | CHECKOUT | | 6 | 1000 | 2012-05-10 07:48:23 | CHECKOUT | | 7 | 1000 | 2012-05-10 07:48:52 | CHECKIN | +--------+---------+---------------------+----------+
これは、1 つのテーブルの行をマージしてチェックインとチェックアウトのビューを持つ SQL クエリです。
SELECT a.log_id as 'ID'
, a.user_id as 'User_ID'
, a.xtimestamp as 'CHECKIN'
, b.xtimestamp as 'CHECKOUT'
FROM clock a, clock b
WHERE a.info = 'CHECKIN'
AND b.info = 'CHECKOUT'
AND a.user_id = b.user_id
GROUP BY a.log_id;
そして、これがクエリの結果です。
+----+---------+---------------------+---------------------+
| ID | User_ID | CHECKIN | CHECKOUT |
+----+---------+---------------------+---------------------+
| 1 | 1000 | 2012-05-10 07:47:06 | 2012-05-10 07:48:23 |
| 2 | 1003 | 2012-05-10 07:47:23 | 2012-05-10 07:48:11 |
| 3 | 1002 | 2012-05-10 07:47:36 | 2012-05-10 07:47:49 |
| 7 | 1000 | 2012-05-10 07:48:52 | 2012-05-10 07:48:23 |
+----+---------+---------------------+---------------------+
上記の結果からわかるように、4 つのレコードが返されますが、user_id 1000 の ID 7 にはまだ CHECKOUT レコードがなく、id 1 と id 7 の CHECKOUT 日付が同じであるため、3 になるはずです。
私が達成したいのは、このようなものです
+----+---------+---------------------+---------------------+
| ID | User_ID | CHECKIN | CHECKOUT |
+----+---------+---------------------+---------------------+
| 1 | 1000 | 2012-05-10 07:47:06 | 2012-05-10 07:48:23 |
| 2 | 1003 | 2012-05-10 07:47:23 | 2012-05-10 07:48:11 |
| 3 | 1002 | 2012-05-10 07:47:36 | 2012-05-10 07:47:49 |
| 7 | 1000 | 2012-05-10 07:48:52 | null |
+----+---------+---------------------+---------------------+
またはこのように
+----+---------+---------------------+---------------------+
| ID | User_ID | CHECKIN | CHECKOUT |
+----+---------+---------------------+---------------------+
| 1 | 1000 | 2012-05-10 07:47:06 | 2012-05-10 07:48:23 |
| 2 | 1003 | 2012-05-10 07:47:23 | 2012-05-10 07:48:11 |
| 3 | 1002 | 2012-05-10 07:47:36 | 2012-05-10 07:47:49 |
+----+---------+---------------------+---------------------+
誰かが素晴らしいアイデアを持っている場合は、共有してください..どうもありがとう。