我正在努力完成似乎很简单的任务。我的数据库中有两个表:

Table devices:
id, uid, devicecode, devicename, devicetype

Table devicelogs:
id, devicecode, timelogged, devicestatus


在页面加载之前,我使用以下查询获取所有用户的设备:

 $sql = "SELECT * FROM devices WHERE `uid`='1'";


这使我获得了所有用户的设备,然后使用这些设备通过复选框在页面上创建“开关”。

要设置复选框的状态,我需要检查“ devicelogs”表中该设备的最后一个设备状态(打开或关闭)。

我猜我将不得不进行某种形式的联接,其中devicelogs表应显示每个设备的最后记录。虽然不确定如何去做,但我将不胜感激。谢谢。

最佳答案

您可以分两步构建查询。首先,您将为每个timelogged获取最新的devicecode

select  devicecode, max(timelogged) as max_timelogged
from    devicelogs
group by devicecode


您可以通过将其与原始表连接起来,将上述查询用作过滤器

select  t1.*, t2.timelogged, t2.devicestatus
from    devices t1
join    devicelogs t2
on      t1.devicecode = t2.devicecode
join    (
            select  devicecode, max(timelogged) as max_timelogged
            from    devicelogs
            group by devicecode
        ) t3
on      t2.devicecode = t3.devicecode and
        t2.timelogged = t3.max_timelogged

10-04 10:56