MySQL 查詢疑問?
問題描述
現(xiàn)在有一下三張表:
A:文章表B:評(píng)論表C:用戶表
需要達(dá)到一下要求:
隨機(jī)抽出三篇文章,要求輸出內(nèi)容中包括文章的發(fā)表用戶,發(fā)表時(shí)間,文章標(biāo)題,評(píng)論數(shù)量
已知:
文章標(biāo)題,發(fā)表時(shí)間字段為:title,create_time,在文章表topic_list中,表中uid為public_user的id發(fā)表用戶,字段為nickname,在用戶表public_user中評(píng)論表為:topic_comment,其中tid為topic_list的id
需要用一個(gè)sql語句來完成,下面是我寫出的,除了評(píng)論數(shù)量意外,都完成了:
select tl.id,tl.title,tl.create_time,pu.nickname from topic_list as tl left join public_user as pu on tl.uid=pu.id where tid=$tid order by rand() limit 3
想問下各位大神,怎么在這段sql的基礎(chǔ)上,達(dá)到查詢結(jié)果中有每篇文章的評(píng)論數(shù)量結(jié)果?
問題解答
回答1:不建議在SQL中rand,可以先random好id(不過你可能不知道id的范圍=w=)
知道tid的情況下,可以用下面的SQL一句完成,你也可以按自己需要再修改~
SELECT `t`.`title`, `t`.`create_time`, `u`.`nickname`, COUNT(`c`.`id`)FROM `topic_list` AS `t`LEFT JOIN `public_user` AS `u` ON `t`.`uid`=`u`.`id`LEFT JOIN `topic_comment` AS `c` ON `c`.`tid`=`t`.`id`WHERE `t`.`id` IN ($tid1, $tid2, $tid3)GROUP BY `t`.`id`;回答2:
連接評(píng)論表 根據(jù)文章id分組 計(jì)算條數(shù)就行了
回答3:為什么要基于一句sql?如果一句是為了少寫代碼,無可厚非;如果是一句為了性能,na那么這種 sql 既難維護(hù)、難理解而且也沒有所謂的性能提升,極力推薦使用主鍵查詢。很簡(jiǎn)單,先把文章隨機(jī)出來,其他的表用索引或者主鍵會(huì)更快:`$rand = random(1, 100) / 100;$sql = ’SELECT FROM table WHERE id >= (SELECT FLOOR( MAX(id) ’.$rand.’) FROM table ) ORDER BY id LIMIT 1;’;`
回答4:select tl.id,tl.title,tl.create_time,pu.nickname,count(tb.comment) from topic_list as t1 join public_user as pu on tl.uid=pu.id join topic_comment as tb on t1.id = tb.tidwhere tid=$tid order by rand() limit 3
相關(guān)文章:
1. docker-machine添加一個(gè)已有的docker主機(jī)問題2. html5 - 使用angular中,圖片上傳功能中選擇多張圖片是怎么實(shí)現(xiàn)的?有什么好的思路嗎?3. docker - 各位電腦上有多少個(gè)容器啊?容器一多,自己都搞混了,咋辦呢?4. 在windows下安裝docker Toolbox 啟動(dòng)Docker Quickstart Terminal 失敗!5. golang - 用IDE看docker源碼時(shí)的小問題6. 為什么我ping不通我的docker容器呢???7. phpstudy 發(fā)現(xiàn)多個(gè)后門木馬,有人遇到過嗎?8. mysql 5個(gè)left關(guān)鍵 然后再用搜索條件 幾千條數(shù)據(jù)就會(huì)卡,如何解決呢9. 請(qǐng)問一下,這是6.0的嗎?為什么我下載的和老師講的不一樣呢?10. node.js - MongoDB安裝啟動(dòng)
