亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

mysql - SQL分組排序、隨機問題?

瀏覽:102日期:2022-06-21 10:30:39

問題描述

有一個帖子的回復表,posts(id , tid , subject ,message ,dateline),其中:id為自動增長字段,tid為該回復的主體帖子的id(外鍵關聯),subject為回復標題,message為回復內容,dateline為回復時間,用UNIX時間戳表示。請寫SQL,

選出按時間排序的前十個來自不同主題的最新回復;

隨機選一條回復記錄;

問題解答

回答1:

目測1樓第一句不對,沒有保證不同的主題,我是這么寫的:

select * from posts p where p.dateline = (select max(dateline) from posts where tid = p.tid) order by dateline desc limit 10;

其實dateline和id應該順序是一致的,可以考慮換成id,id上主鍵應該效率更高:

select * from posts p where p.id = (select max(id) from posts where tid = p.tid) order by id desc limit 10;

第2句個人覺得最好還是不用ORDER BY RAND(),數據量稍微多一點就會效率低下,因為這樣寫可以會導致多次掃描,這樣寫可能會好一點:

SELECT * FROM posts WHERE id >= ((SELECT MAX(id) FROM posts)-(SELECT MIN(id) FROM posts)) * RAND() + (SELECT MIN(id) FROM posts) LIMIT 1;回答2:

試試看,如果表數據過大不建議使用ORDER BY RAND(),你先試試這兩句SQL行不行。希望對你有幫助.

SELET `id`,`tid`,`subject`,`message`,`dateline` FROM `posts` WHERE `tid`=NULL ORDER BY `tid`,`dateline`SELET `id`,`tid`,`subject`,`message`,`dateline` FROM `posts` WHERE `tid`=!NULL ORDER BY RAND() LIMIT 1回答3:

樓上第一條回答目測不對吧,以下個人見解,歡迎點評指教

select t2.* from (select tid,max(dateline) maxDateline from posts group by tid order by maxDateline desc limit 10)t1 inner join posts t2 on t1.tid=t2.tid and t1.maxDateline=t2.dateline

相關文章:
主站蜘蛛池模板: 欧美激情视频一级视频一级毛片 | 亚洲成人网页 | 美女午夜影院 | 色老头一区二区三区在线观看 | 国产精品18久久久久久小说 | 欧美成人爽毛片在线视频 | 99精品视频一区在线视频免费观看 | 精品国产中文一级毛片在线看 | 韩国一级永久免费观看网址 | 97视频免费在线 | 精品欧美成人bd高清在线观看 | 国产成人久久 | 91理论片午午伦夜理片久久 | 成人一级毛片 | 国产美女拍拍拍在线观看 | 成人在免费视频手机观看网站 | 久久精品a亚洲国产v高清不卡 | 日韩成人精品日本亚洲 | 老司机午夜性生免费福利 | 欧美一级大片免费看 | 美女一级毛片毛片在线播放 | 娇喘嗯嗯~轻点啊视频福利 | 亚洲区精品 | 亚洲在线网 | 99久久香蕉国产综合影院 | avtt亚洲一区中文字幕 | 亚洲一区二区三区久久精品 | 成 人 黄 色 视频 免费观看 | 免费人成综合在线视频 | 2019天天操天天干天天透 | 国产精品久久久久久 | 国产在线极品 | 欧美日韩一日韩一线不卡 | 怡红院亚洲红怡院天堂麻豆 | 国产三级免费观看 | 欧美一级毛片片免费孕妇 | 在线免费成人 | 天天看片天天爽 | 亚洲欧美手机在线观看 | 亚洲网站免费观看 | 亚洲人成网址在线播放a |