0
我有3個表,結構如下。查詢建議用戶尚未訂閱的前15名最活躍用戶
tbl_activities (id, activity_type, user_id)
tbl_subscriptions (id, subscriber_id, subscribed_id)
tbl_users (id, user_name)
用戶可以做像like或comment這樣的活動。他也可以訂閱許多用戶。現在我想根據活動類型爲他建議一些用戶,並避免他目前的訂閱用戶。
假設用戶「A」的id = 1 =>我想向最活躍的用戶(擁有大量活動的用戶)推薦15個用戶給用戶「A」,並避免當前用戶「A」 。
我使用了這個查詢,但大約需要15秒才能完成。
SELECT id, user_name FROM tbl_users
WHERE id IN (
SELECT t.user_id FROM (
SELECT act.user_id
FROM tbl_activities act
INNER JOIN tbl_users u
ON act.user_id=u.id
WHERE u.id NOT IN (
SELECT s.subscribed_uid
FROM tbl_subscriptions s
INNER JOIN tbl_users u1
ON s.subscribed_uid=u1.id
WHERE s.subscriber_id=1
)
GROUP BY act.user_id
ORDER BY COUNT(act.user_id)
DESC LIMIT 0,15
) AS t
)
我知道這是非常緩慢的,因爲查詢「in and not in」。但我找不到最好的解決方案。
欣賞你的分享關於更好的查詢來解決這個問題。
如果您願意,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做(您沒有),請提供適當的DDL(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您還沒有這樣做(再次沒有),請提供與步驟1中提供的信息相對應的所需結果集。 – Strawberry