Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数据库中获取最新的条目_Php_Mysql_Database - Fatal编程技术网

Php 从数据库中获取最新的条目

Php 从数据库中获取最新的条目,php,mysql,database,Php,Mysql,Database,我有四个表格,分别是分配表、用户表、车辆表和燃油表。我想做一个查询,返回唯一的行(也就是说,除了users表之外,每个表应该只有一个唯一的ID) 我希望查询返回最新的条目(比如最后一个条目) 下面是我当前的查询,但它返回找到的第一行,而不是最后一行 Select distinct v.vname, v.year, v.make, v.model, v.vid, v.fueltype, f.fID, f.meter,

我有四个表格,分别是分配表、用户表、车辆表和燃油表。我想做一个查询,返回唯一的行(也就是说,除了users表之外,每个表应该只有一个唯一的ID)

我希望查询返回最新的条目(比如最后一个条目)

下面是我当前的查询,但它返回找到的第一行,而不是最后一行

Select distinct
     v.vname,
     v.year,
     v.make,
     v.model,
     v.vid,
     v.fueltype, 
     f.fID,
     f.meter,
     f.date,
     a.driverID,
     a.dateassigned,
     u.uid,
     u.name,
     u.surname
 from
     vehicles as v,
     assigns as a,
     users as u, 
     fuel as f
 where
     v.vid = a.vID
 and
     a.driverID = u.id
 and
     v.vid = f.vID
 group by
     v.vid
 order by
     f.date desc

如何使用这些表从数据库中获取最后一个条目

请尝试以下有限制的代码:

   Select distinct
     v.vname,
     v.year,
     v.make,
     v.model,
     v.vid,
     v.fueltype, 
     f.fID,
     f.meter,
     f.date,
     a.driverID,
     a.dateassigned,
     u.uid,
     u.name,
     u.surname
 from
     vehicles as v,
     assigns as a,
     users as u, 
     fuel as f
 where
     v.vid = a.vID
 and
     a.driverID = u.id
 and
     v.vid = f.vID
 group by
     v.vid
 order by
     f.date desc 
 limit 1
有什么问题,请留言

Select 
     v.vname,
     v.year,
     v.make,
     v.model,
     v.vid,
     v.fueltype, 
     f.fID,
     f.meter,
     f.date,
     a.driverID,
     a.dateassigned,
     u.uid,
     u.name,
     u.surname
 from
     vehicles as v,
     assigns as a,
     users as u, 
     fuel as f
 where
     v.vid = a.vID
 and
     a.driverID = u.id
 and
     v.vid = f.vID
 order by
     v.id desc 
 limit 1

如果您的表具有id作为主键,那么上面的SQL将起作用。

我认为这不是您现在想要的,但我只想在下次创建数据库时将其扔到那里。这件事很容易通过laravel的方法解决。只需创建两个数据库字段
created\u at
updated\u at

这两个字段都是时间戳,
created_at
在您创建项目时更新,而
updated_at
在您尝试更新数据库中的任何字段时更新。 通过这种方式,您可以在创建或更新数据库时获取数据库中的最新记录


由于两个时间戳相互碰撞的可能性很小,几乎没有,因此您几乎总是会得到一个结果。您还可以根据创建或更新的时间戳以这种方式对记录进行排序

我推测你想要的东西大致如下:

SELECT
    v.vname,
    v.year,
    v.make,
    v.model,
    v.vid,
    v.fueltype, 
    f1.fID,
    f1.meter,
    f1.date,
    a.driverID,
    a.dateassigned,
    u.uid,
    u.name,
    u.surname
FROM vehicles v
INNER JOIN assigns a
    ON v.vid = a.vID
INNER JOIN users u
    ON a.driverID = u.id
INNER JOIN fuel f1
    ON v.vid = f1.vID
INNER JOIN
(
    SELECT vID, MAX(date) AS max_date
    FROM fuel
    GROUP BY vID
) f2
    ON f1.vID = f2.vID AND f1.date = f2.max_date
ORDER BY
    f1.date DESC;
此查询只是对子查询进行附加联接,该子查询为每辆车查找最近的日期。这将通过删除每辆车的所有非最新记录来限制当前查询


请注意,我已将老式隐式联接转换为显式内部联接。这是目前编写SQL查询的首选方法。

在选择其他非聚合列时,千万不要执行
分组方式(除非其他列在功能上依赖于
v.vid
,我认为这里不是这种情况)。它返回一行,该行也不包含该车辆视频的数据。哪列确定记录的年龄?由于MySQL 5.6,GROUP BY和ORDER BY的结果是随机的。这只返回一行。而且它不是数据库中的最后一个条目。基本上,我只想从燃油表中为每辆加满燃油的车辆获取最后一个条目。因此,燃油表中有大量车辆燃油日志(一辆车出现不止一次)。因此,假设车辆的vid为43(vid是车辆表中的车辆id),并且在燃油表中,该vid可能出现多次。我只想得到这辆车的最后一个条目。。。但我不是在寻找这辆车的最后一个条目——燃料表中所有车辆的最后一个条目——你完全没有抓住问题的关键。现有查询需要修改。该查询是GET。这不是一个帖子。所以我不能使用最后一个插入ID()。另外,我如何从这4个表中查询数据?我在这里考虑了应显示最新的v.id条目,因为没有提到必须显示哪一个最新的id燃油表有一个日期列,用于存储车辆加注的日期。每辆车的日期绝对不会相撞。。。这就是为什么在我的查询中,我按f.date对它们进行排序。这将返回一个不应该发生的空结果,我认为我的逻辑对于您尝试执行的操作是正确的。我猜您的数据有问题。好的,让我发布模式,然后您可以尝试从那里运行代码,您介意吗?在此处设置演示:。添加一些我们可能使用的数据。哦,嘿,很抱歉没有重新检查我是如何写代码的(因为我没有复制-粘贴它)。。。我写的是u.uid而不是u.id。它确实可以工作,但它会为一辆车获得重复的行。
SELECT
    v.vname,
    v.year,
    v.make,
    v.model,
    v.vid,
    v.fueltype, 
    f1.fID,
    f1.meter,
    f1.date,
    a.driverID,
    a.dateassigned,
    u.uid,
    u.name,
    u.surname
FROM vehicles v
INNER JOIN assigns a
    ON v.vid = a.vID
INNER JOIN users u
    ON a.driverID = u.id
INNER JOIN fuel f1
    ON v.vid = f1.vID
INNER JOIN
(
    SELECT vID, MAX(date) AS max_date
    FROM fuel
    GROUP BY vID
) f2
    ON f1.vID = f2.vID AND f1.date = f2.max_date
ORDER BY
    f1.date DESC;