I have 2 table (pcgroup and client pc). Let say the date today is 24/11, I need to find which PC is online and which pc is not online for the last 2 days using only mySQL.
INSERT INTO pcgroup(id, groupName)
VALUES(1, 'defaultGroup');
INSERT INTO clientpc(id, pcGroupId, clientPcName, lastOnlineTime)
VALUES(1, 1, 'pc1', '2011-11-24');
INSERT INTO clientpc(id, pcGroupId, clientPcName, lastOnlineTime)
VALUES(2, 1, 'pc2', '2011-11-24');
INSERT INTO clientpc(id, pcGroupId, clientPcName, lastOnlineTime)
VALUES(3, 1, 'pc3', '2011-11-20');
INSERT INTO clientpc(id, pcGroupId, clientPcName, lastOnlineTime)
VALUES(4, 1, 'pc4', '2011-11-20');
INSERT INTO clientpc(id, pcGroupId, clientPcName, lastOnlineTime)
VALUES(5, 1, 'pc5', '2011-11-20');
Here is my query for now
SELECT DISTINCT
pcgroup.id AS pcGroupID, pcgroup.groupName,
online.onlinePC, offline.offlinePC
FROM
(
SELECT
pcgroup.Id, pcGroup.groupName
FROM
pcgroup
WHERE
(pcgroup.Id = 1)
) pcgroup
LEFT JOIN
(
SELECT
clientpc.Id, clientpc.pcGroupId, clientpc.clientPcName AS onlinePC
FROM
clientpc
WHERE
DateDiff(CURDATE(),clientpc.lastOnlineTime) <= 2
AND
DateDiff(CURDATE(),clientpc.lastOnlineTime) IS NOT NULL
) online
ON
pcgroup.Id = online.pcGroupId
LEFT JOIN
(
SELECT
clientpc.Id, clientpc.pcGroupId, clientpc.clientPcName AS offlinePC
FROM
clientpc
WHERE
(DateDiff(CURDATE(),clientpc.lastOnlineTime) > 2
OR
DateDiff(CURDATE(),clientpc.lastOnlineTime) IS NULL)
) offline
ON pcgroup.Id = offline.pcGroupId
This is the result I get
*pcGroupID groupName onlinePC offlinePC*
1 defaultGroup pc1 pc3
1 defaultGroup pc1 pc4
1 defaultGroup pc1 pc5
1 defaultGroup pc2 pc3
1 defaultGroup pc2 pc4
1 defaultGroup pc2 pc5
However, what I need is something like this
*pcGroupID groupName onlinePC offlinePC*
1 defaultGroup pc1 pc3
1 defaultGroup pc2 pc4
1 defaultGroup pc5
So my question is, is that achievable? and if yes, how. Have been working on this query for 2 days. So i really appreciate if you guys can help me out.
Why not use 2 simple queries and do the presentation in your application?: