検索

ホームページ  >  に質問  >  本文

mysql - SQL分组排序、随机问题?

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

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

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

ringa_leeringa_lee2884日前773

全員に返信(3)返信します

  • 黄舟

    黄舟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;

    返事
    0
  • PHP中文网

    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

    返事
    0
  • 怪我咯

    怪我咯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

    返事
    0
  • キャンセル返事