mysql - SQL分组排序、随机问题?
ringa_lee
ringa_lee 2017-04-17 14:54:51
0
3
774

有一个帖子的回复表,
posts(id , tid , subject ,message ,dateline),
其中:id为自动增长字段,tid为该回复的主体帖子的id(外键关联),subject为回复标题,message为回复内容,dateline为回复时间,用UNIX时间戳表示。
请写SQL,

  1. 选出按时间排序的前十个来自不同主题的最新回复;

  2. 随机选一条回复记录;

ringa_lee
ringa_lee

ringa_lee

全員に返信(3)
黄舟

1 階の最初の文の目視検査は間違っています。異なるトピックが存在するという保証はありません。

select * from 投稿 p where p.dateline = (tid = p.tid の投稿から max(dateline) を選択) order by dateline desc limit 10;

実際には、dateline と id は同じ順序である必要があります。id の主キーをより効率的に変更することを検討できます。

select * from 投稿 p where p.id = (tid = p.tid の投稿から max(id) を選択) ID による順序制限 10;

2番目の文は、個人的にはORDER BY RAND()を使用しないほうが良いと思います。このように書くと複数のスキャンが発生する可能性があるため、データ量が少し多くなる場合は非効率になるため、このように書くのが良いかもしれません。より良い:

SELECT * FROM 投稿 WHERE id >= ((投稿から MAX(id) を選択)-(投稿から MIN(id) を選択)) * RAND() + (投稿から MIN(id) を選択)制限 1;
いいねを押す +0
Ty80

試してみてください。テーブル データが大きすぎる場合は、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
いいねを押す +0
刘奇

上の階の最初の答えは、目視によると正しくありません。以下は私の個人的な意見です。

select t2.* from (select tid,max(dateline) maxDateline from 投稿グループ by tid order by maxDateline 記述制限 10)t1 内部結合 t2 を t1.tid=t2.tid および t1.maxDateline= に投稿しますt2.dateline
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート