2

LIKES (likeID、userID、objectID、likeDate) の MySQL テーブルがあり、問題のユーザーの後に行われたすべての「いいね」をカウントできるようにしたいと考えています。

通常、私は日付を取得します:

SELECT likeDate FROM LIKES WHERE userID = <logged in user's ID>

次に、すべての日付を見つけて、次のように返された行をカウントします (または mysql COUNT を使用します)。

SELECT * FROM LIKES WHERE likeDate > <given date>

ただし、データベースに対して 2 つの呼び出しを行うのではなく、1 つのクエリでこれを行う方法があると確信しています。誰でも助けることができますか?

ありがとう

4

3 に答える 3

2

最初のクエリの結果を 2 番目のクエリに直接フィードします。

SELECT COUNT(*)
FROM LIKES
WHERE likeDate > (
    SELECT max(likeDate)
    FROM LIKES
    WHERE userID = <logged in user's ID>
)

max()ただし、最初のクエリに使用を追加する必要があることに注意してください。

このクエリは、回答を得るための最速の方法です。最大のパフォーマンスを確保するには、 と の両方にインデックスを追加しuserIDますlikeDate

create index likes_userId on likes(userID);
create index likes_likeDate on likes(likeDate);
于 2013-02-07T12:53:29.953 に答える
1
SELECT l1.likeDate, 
    (SELECT COUNT(1) FROM LIKES l2 WHERE l2.likeDate > l1.likeDate) AS likesAfter
FROM LIKES l1
WHERE userID = ?
GROUP BY l1.likeDate

または結合として、

SELECT l1.likeDate, COUNT(1)
FROM LIKES l1
LEFT OUTER JOIN LIKES l2 ON l2.likeDate > l1.likeDate
WHERE userID = ?
GROUP BY l1.likeDate
于 2013-02-07T12:52:12.847 に答える
0
SELECT * FROM LIKES WHERE likeDate > 
IFNULL((SELECT max(likeDate) FROM LIKES WHERE userID = <logged in user's ID> 
                                  adn  objectId=<question's Id>),0)
and objectId=<question's Id>
于 2013-02-07T12:58:38.607 に答える