1. 程式人生 > 其它 >tp5 mysql 查詢表中每個類的前n條資料

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條資料

  結果:

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; });
 結果: