tp5 mysql 查詢表中每個類的前n條數據


 因為我的分類存的是id, 所以要join 關聯查詢

 

 
        
(theme_id < 4 查的是前三個分類的數據,去掉則是全部分類)

SELECT 
    a.id,a.title,a.update_time,c.title as className
FROM
    ( 
er_article AS a, (SELECT GROUP_CONCAT(id) AS ids FROM er_article WHERE theme_id < 4 AND `status` = 1 And position > 0 GROUP BY theme_id ) AS b
) LEFT JOIN er_theme c ON a.theme_id = c.id WHERE FIND_IN_SET(a.id, b.ids) BETWEEN 1 AND 3 ORDER BY a.theme_id ASC, a.update_time DESC

 

er_theme 是關聯的分類表
GROUP_CONCAT(id) as ids 將所有id 存入一個數組ids
FIND_IN_SET(id,ids) 匹配對應數組的id

   BETWEEN 1 AND 3 每個分類查詢不超過3條數據

 

  

  結果:  ( 因為有條件status 和 position 限制  所以有的分類不足3條)

 

 

tp5

   $sql = "SELECT 
    a.id,a.title,subtitle,a.update_time,c.title as class
FROM
    ( er_article AS a,
    (SELECT 
        GROUP_CONCAT(id) AS ids
    FROM
        er_article WHERE theme_id < 4 AND `status` = 1 And position > 0
    GROUP BY theme_id ) AS b )
     LEFT JOIN er_theme c ON a.theme_id = c.id
WHERE
    FIND_IN_SET(a.id, b.ids) BETWEEN 1 AND 3 
ORDER BY a.theme_id ASC, a.update_time DESC";

        $list = Db::query($sql);
        array_walk($list,function ($v,$k) use (&$data){
            $data[$v['class']][] = $v;
        });

 

 結果:

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM