簡體   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