有一个帖子的回复表,
posts(id , tid , subject ,message ,dateline),
其中:id为自动增长字段,tid为该回复的主体帖子的id(外键关联),subject为回复标题,message为回复内容,dateline为回复时间,用UNIX时间戳表示。
请写SQL,
选出按时间排序的前十个来自不同主题的最新回复;
随机选一条回复记录;
黄舟2017-04-17 14:56:51
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;
PHP中文网2017-04-17 14:56:51
試してみてください。テーブル データが大きすぎる場合は、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
怪我咯2017-04-17 14:56:51
上の階の最初の答えは、目視によると正しくありません。以下は私の個人的な意見です。
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