[英]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
如果您只需要圖像表中的一列,則使用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_packet的值限制
我已經為上述查詢使用了示例架構和數據集,您必須根據需要進行調整
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.