mysql分組取每組前幾條記錄

項(xiàng)目中經(jīng)常會(huì)遇到對(duì)數(shù)據(jù)進(jìn)行分組排序并取前N條的需求门怪,比如有一張資訊表如下

CREATE TABLE `test_news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT NULL COMMENT '文章標(biāo)題',
  `content` longtext COMMENT '文章內(nèi)容',
  `channel` int(11) DEFAULT NULL COMMENT '文章頻道',
  `status` int(11) DEFAULT NULL COMMENT '狀態(tài),1正常罚勾,0關(guān)閉',
    `create_time` datetime DEFAULT NULL COMMENT '文章發(fā)布時(shí)間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=513 DEFAULT CHARSET=utf8;

文章分為多個(gè)頻道,比如體育新聞吭狡、娛樂(lè)新聞尖殃、財(cái)經(jīng)新聞、汽車(chē)新聞等多個(gè)頻道划煮,現(xiàn)在要求取出每種類(lèi)型的最新的前5條新聞送丰,避免多次進(jìn)行數(shù)據(jù)庫(kù)連接我們肯定不能每種類(lèi)型都單獨(dú)去請(qǐng)求數(shù)據(jù)庫(kù)查詢,假如種類(lèi)不多的話我們可以分別查出每種新聞的前5條然后使用union all進(jìn)行合并弛秋,這樣也只需要進(jìn)行一次數(shù)據(jù)庫(kù)連接器躏,除了這種方法還有以下兩種方法。
方法一:
由于設(shè)置了表的id自增蟹略,所以最新的資訊可以根據(jù)id來(lái)倒序查也可根據(jù)創(chuàng)建時(shí)間create_time來(lái)進(jìn)行倒序登失,這里采用的id,要取5條最新資訊挖炬,所以查詢的count需要小于5

思路:遍歷所有資訊與當(dāng)前資訊做比較揽浙,同一頻道且相同狀態(tài)的資訊不超過(guò)5個(gè)當(dāng)前的id大,那么這條資訊才算最新的前5條

SELECT
    id,
    title,
    channel,
    create_time
FROM
    test_news AS a
WHERE
    (
        SELECT
            count(1)
        FROM
            test_news AS b
        WHERE
            a.channel = b.channel
        AND a. STATUS = b. STATUS
        AND a.id < b.id
    ) < 5
ORDER BY
    a.channel ASC,
    a.id DESC;

方法二:

SELECT
    a.id,
    a.title,
    a.channel,
    a.create_time
FROM
    test_news AS a
LEFT JOIN test_news AS b ON a.channel = b.channel
AND a. STATUS = b. STATUS
AND a.id < b.id
WHERE
    a. STATUS = 1
GROUP BY
    a.channel,
    a.id
HAVING
    count(1) < 5
ORDER BY
    a.channel ASC,
    a.id DESC;
方法一查詢結(jié)果
方法二查詢結(jié)果

原文作者技術(shù)博客:http://www.reibang.com/u/ac4daaeecdfe

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茅茂,一起剝皮案震驚了整個(gè)濱河市捏萍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌空闲,老刑警劉巖令杈,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碴倾,居然都是意外死亡逗噩,警方通過(guò)查閱死者的電腦和手機(jī)掉丽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)异雁,“玉大人捶障,你說(shuō)我怎么就攤上這事「俚叮” “怎么了项炼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)示绊。 經(jīng)常有香客問(wèn)我锭部,道長(zhǎng),這世上最難降的妖魔是什么面褐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任拌禾,我火速辦了婚禮,結(jié)果婚禮上展哭,老公的妹妹穿的比我還像新娘湃窍。我一直安慰自己,他們只是感情好匪傍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布您市。 她就那樣靜靜地躺著,像睡著了一般析恢。 火紅的嫁衣襯著肌膚如雪墨坚。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天映挂,我揣著相機(jī)與錄音泽篮,去河邊找鬼。 笑死柑船,一個(gè)胖子當(dāng)著我的面吹牛帽撑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鞍时,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亏拉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了逆巍?” 一聲冷哼從身側(cè)響起及塘,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锐极,沒(méi)想到半個(gè)月后笙僚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡灵再,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年肋层,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亿笤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栋猖,死狀恐怖净薛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒲拉,我是刑警寧澤肃拜,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站雌团,受9級(jí)特大地震影響爆班,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辱姨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戚嗅。 院中可真熱鬧雨涛,春花似錦、人聲如沸懦胞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)躏尉。三九已至蚯根,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胀糜,已是汗流浹背颅拦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留教藻,地道東北人距帅。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像括堤,于是被迫代替她去往敵國(guó)和親碌秸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容