iT邦幫忙

1

找到類型底下自己文章的最新時間?根據這個時間來進行「類型」的排序?

兩個資料表
media
media_category

情況是
我會將 media_category 的類型資訊印出來
現在有三個類型假設為
(無排序時)

media_category_id / name
1 / 你
2 / 好
3 / 嗎

每個 media 都會綁定一個 media_category_id
所以這三個類型會有自己的 media(文章)
每個 media 都會有一個新增時間假設為 add_time
我要根據這個類型所屬的 media 的最新的 add_time 來排序這些類型
也就是說假設類型 1 裡面的「最新發佈文章」是下午一點發布
類型 2 文章是下午兩點發布
類型 3 文章是中午十二點發布
(以上時間都是該類型自己的 media 的 add_time 最新時間)
在類型的排序會是

2 -> 1 -> 3

最新發布的會在前面

我透過以下找到每個類型最新文章發布的時間

SELECT m.add_time FROM `media` as m
        JOIN `media_category` as mc ON m.media_category_id = mc.media_category_id
        GROUP BY m.media_category_id
        ORDER BY m.add_time DESC

此時會回傳 3 rows(預期)

最大問題來了

SELECT
      mc.*,
      (
        SELECT m.add_time FROM `media` as m
        JOIN `media_category` as mc ON m.media_category_id = mc.media_category_id
        GROUP BY m.media_category_id
        ORDER BY m.add_time DESC
        -- LIMIT 1
      ) as row
      FROM `media_category` as mc
      JOIN `media` as m ON m.media_category_id = mc.media_category_id
      GROUP BY mc.media_category_id
      ORDER BY row DESC

因為 row 回傳的不只一個,所以會有錯誤(會回傳 3 rows,因為類型有三種,各取自己 media 最新發布時間 add_time)
那我要怎麼使它變成是只要回傳「自己」類型的文章最新時間好讓我可以在下面排序?!
我有加上 LIMIT 1 但是他會取回傳 3 rows 最新的其中那個時間,這樣變成三個類型時間都一樣
或是有更好的做法?

1 個回答

0
淺水員
iT邦新手 3 級 ‧ 2019-08-13 18:55:36
最佳解答

不知道是不是你要的

SELECT
    mc.*,
    MAX(m.add_time) AS `add_time`
FROM media_category AS mc
INNER JOIN media AS m ON mc.media_category_id = m.media_category_id
GROUP BY (mc.media_category_id)
ORDER BY `add_time` DESC;

我要發表回答

立即登入回答