从数据库中获取最新条目

时间:2018-05-29 04:16:07

标签: php mysql database

我有四个表用于分配用户车辆燃料。我想创建一个返回唯一行的查询(可以说,除了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

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

5 个答案:

答案 0 :(得分:0)

尝试下面的限制代码:

@PostMapping(path = "/price-menu", consumes = "application/json", produces = "application/json")

答案 1 :(得分:0)

    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

有任何问题,请发表评论。

答案 2 :(得分:0)

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就可以了。

答案 3 :(得分:0)

我不认为你现在想要的是什么,但我只想在下次创建数据库时把它扔到那里。这个问题可以通过 laravel 在其方法中轻松解决。只需创建两个数据库字段created_atupdated_at

当您创建项目时,这两个字段都是时间戳和created_at更新,而updated_at在尝试更新数据库上的任何字段时更新。 这样,您可以在创建或更新数据库时获取最新记录。

由于两个时间戳相互碰撞的可能性很小,因此几乎总能获得一个结果。您也可以根据创建或更新的时间戳以这种方式订购记录。

答案 4 :(得分:0)

我猜测你想要的是以下内容:

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查询的首选方法。