[英]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_at
和updated_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.