繁体   English   中英

从数据库获取最新条目

[英]Getting The Most Recent Entry From The Database

我有四个表,用于分配用户车辆燃料 我想查询返回唯一行的查询(也就是说,除了用户表外,每个表都应该只有一个唯一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 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_atupdated_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查询的首选方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM