0

微調整したい既存の MYSQL クエリがありますが、その方法がわかりません。topic個々のトピックに投稿された最新のメッセージで並べられるように調整したいと思います。

これが私が現在持っているものです:

select
  t.*,
  coalesce(s.StarCount, 0) as StarCount,
  coalesce(m.UserCount, 0) as UserCount,
  coalesce(m.MessageCount, 0) as MessageCount
from
  Topics t
  left join (
    select 
      topic, 
      count(distinct user) as UserCount,
      count(*) as MessageCount
     from Messages
     group by topic
  ) m ON m.topic = t.topic
  left join (
   select 
    topic, 
    count(*) as StarCount
   from Stars_Given
   group by topic
 ) s ON s.topic = t.topic
ORDER BY UserCount DESC, topicID DESC
LIMIT 0,15

最良の答えはこのコードですが、調整されています。

そして、これが私のテーブルのサンプルです。

メッセージ

 MessageID    User      Message      Topic    Time
 1            Tom       Hi           ball     9:00am
 2            John      Hey          book     10:00am
 3            Mike      Sup          book     8:00am
 4            Mike      Ok           book     11:00am

トピック

 topicID    Topic      Title     Category1    Category2
 1          ball       Sports    Action       Hot
 2          book       School    Study        Hot

Stars_Given

 starID     Topic
 1          ball
 2          book
 3          book
 4          book

私は最終的にしたい:

Topic_Review

 Topic    Title     StarCount    UserCount    MessageCount
 book     school    3            2            3
 ball     Sports    1            1            1

注: のトピックが表bookで使用されている最新のトピックであるMessagesため、このトピックが最初です。

4

1 に答える 1

1

あなたのクエリはほとんどそこにあります。メッセージサブクエリに最大タイムスタンプを追加するだけです。これは、サブクエリのmaxt列です。m

select t.*, coalesce(s.StarCount, 0) as StarCount, coalesce(m.UserCount, 0) as UserCount,
       coalesce(m.MessageCount, 0) as MessageCount
from Topics t left join
     (select topic, count(distinct user) as UserCount, count(*) as MessageCount,
             max(time) as maxt
     from Messages
     group by topic
    ) m
    ON m.topic = t.topic left join
    (select topic, count(*) as StarCount
     from Stars_Given
     group by topic
    ) s
    ON s.topic = t.topic
ORDER BY maxt desc, UserCount DESC, topicID DESC
LIMIT 0, 15;
于 2013-08-29T23:07:27.537 に答える