簡體   English   中英

Laravel每組可獲得n個結果

[英]Laravel get n results per group

我有兩個表:tbl_properties和tbl_property_images。 我需要選擇每個屬性的最新3張圖片以及property_id 我嘗試了帶有限制的子查詢

DB::table('properties as p')
->leftjoin(DB::raw("(select property_id, property_image_id, image
                     from tbl_property_image 
                     where property_image_status = 1 
                     group by  property_id 
                     having count(*) = 3)  as tbl_imgtemp") , 'imgtemp.property_id', '=', 'p.property_id')
->where('property_status',1)
->get();

這將返回總共3條記錄。 請幫助我我該怎么做。 如何為每個屬性選擇3張圖像?

您使用以下查詢獲取每個屬性3張圖像,假設ID列設置為自動遞增,我已使用圖像表的ID列選擇最新圖像

SELECT p.*,i.*
FROM properties  p
JOIN(SELECT i1.property_id,i1.property_image_status,i1.image
    FROM tbl_property_image i1 
    LEFT OUTER JOIN tbl_property_image i2
      ON (i1.property_id = i2.property_id AND i1.property_image_id < i2.property_image_id)
      WHERE i1.property_image_status = 1
    GROUP BY i1.property_id,i1.property_image_status,i1.image
    HAVING COUNT(*) < 3
) i
ON p.property_id = i.property_id

DEMO

如果您只需要圖像表中的一列,則使用group_concat()另一種方法

SELECT p.property_id , p.title,SUBSTRING_INDEX(GROUP_CONCAT(i.image ORDER BY i.property_image_id DESC),',',3) images
FROM properties  p
JOIN tbl_property_image i ON p.property_id = i.property_id
WHERE i.property_image_status = 1
GROUP BY p.property_id , p.title

但是此解決方案有一些限制,根據docs ,結果會被截斷為group_concat_max_len系統變量給定的最大長度,該變量的默認值為1024。盡管返回的有效最大長度可以設置為更高的值。值受max_allowed_pa​​cket的值限制

DEMO

我已經為上述查詢使用了示例架構和數據集,您必須根據需要進行調整

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM