今天遇到一個(gè)問(wèn)題,文章評(píng)論回復(fù),由于評(píng)論和回復(fù)是二個(gè)不同的表,現(xiàn)在要根據(jù)回復(fù)時(shí)間來(lái)排序,而回復(fù)表的記錄可能存在可能不存在.
SELECT? * from Sys_Article_Remark? sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273? order by rr.`replyTime` desc 肯定不行..它會(huì)把所有的記錄都查尋出來(lái),我們的評(píng)論表不能出現(xiàn)重復(fù).
用SELECT? distinct *? from Sys_Article_Remark? sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273? order by rr.`replyTime` desc和上面一樣的效果.
用SELECT *? from Sys_Article_Remark? sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273? group by rr.`remarkId` order by rr.`replyTime` desc 根據(jù)articleId分組也不行..因?yàn)樗鼤?huì)把回復(fù)表中不存的記錄,所有null記錄當(dāng)成是一組..對(duì)distinct來(lái)說(shuō).所有null也是相同的.
最后用SELECT *? from Sys_Article_Remark? sar left join `Sys_Remark_Reply` rr on sar.`id`=rr.`remarkId` where sar.`articleId`=18273 group by sar.id order by rr.`replyTime` desc ..根據(jù)評(píng)論id來(lái)分組.就不會(huì)出現(xiàn)評(píng)論重復(fù)了.
distinct 表示不出現(xiàn)重復(fù)的列,group by表示按列分組.這二個(gè)的性能問(wèn)題還沒(méi)認(rèn)真看過(guò).不過(guò)自己感覺(jué)group by 比 distinct 更好用.因?yàn)閐istinct只對(duì)單個(gè)字段有用.如果查詢多個(gè)就不行了.
如 數(shù)據(jù)表test 中的記錄 主鍵 id 值 name
假設(shè)有 1,a 2,b 3,c 4,b 5,c 這五條記錄.如果你只想查出a b c 用 select distinct name from test 可以做到.結(jié)果為 name a b c .如果你想把name 對(duì)應(yīng)的id也查出來(lái)?用 select id,distinct name from test ?這時(shí)distinct 就沒(méi)有用了.因?yàn)閕d沒(méi)有重復(fù).所以它會(huì)把所有記錄都顯示出來(lái).
現(xiàn)在最好用group by
select * from test group by name 這樣就強(qiáng)制只顯示3條記錄了…
posted on 2007-12-05 10:45
crazy 閱讀(984)
評(píng)論(1) 編輯 收藏 所屬分類:
mysql數(shù)據(jù)庫(kù)