0

次のコードは私が探しているものに対して機能しますが、効率的なニュース フィードを作成するためのより良い方法があるかどうかを確認しようとしています。このニュース フィードは、最新のコメントやいいねなどを選択することになっていますが、ユーザーごとに最新のもののみを表示します (つまり、John が 2 つのアイテムを高く評価し、3 つのアイテムにコメントした場合、最新のコメントやいいねのみを表示します。複数の UNION が関係しています。

SELECT * 
FROM (SELECT username, time, comment FROM comments ORDER BY time DESC) AS temp 
GROUP by username 
UNION 
SELECT * 
FROM (SELECT username, time, likes FROM likes ORDER BY time DESC) AS temp 
GROUP BY username 
ORDER BY time DESC
LIMIT 10
4

1 に答える 1

0

JOINで2つのテーブルを作成できると思いますがusername、これにより、ユニオンの代わりに次のような追加の列が得られます。

SELECT
  c1.username,
  c1.`time` AS CommentTime,
  c1.comment,
  l1.`time` AS LikeTime,
  l1.likes
FROM comments AS c1
INNER JOIN
(
   SELECT username, MAX(`time`) LatestTime
   FROM Comments 
   GROUP BY username
) AS c2  ON c1.username = c2.username
        AND c1.`time`   = c2.LatestTime
INNER JOIN Likes l1 ON c1.username = l2.username
INNER JOIN 
(
   SELECT username, MAX(`time`) LatestTime
   FROM Likes
   GROUP BY username   
) AS l2  ON l1.username = l2.username
        AND l1.`time`   = l2.latestTime
ORDER BY c1.`time` DESC
LIMIT 10;

これusernameにより、最新のコメントとlikes最新の時刻が表示されます。

于 2013-02-16T09:28:41.817 に答える