我有一個表,看起來像這樣 - http://d.pr/jQ1P,然後另一個表(我們稱之爲「動作」表),其中包含所有用戶已完成的事情列表。如何爲以下方案編寫查詢?
如何編寫一個查詢,可以給我一個有多少新用戶referrer_id「1」引用的計數,並且在「操作」表中至少還有一個條目?例如。對於referrer_id「1」,「1723」和「1724」在「動作」表中至少有1行,但不是「1725」。因此對於用戶「1」,他已成功引用2個用戶,即使還有「 1725" 。
希望是有道理的。
我有一個表,看起來像這樣 - http://d.pr/jQ1P,然後另一個表(我們稱之爲「動作」表),其中包含所有用戶已完成的事情列表。如何爲以下方案編寫查詢?
如何編寫一個查詢,可以給我一個有多少新用戶referrer_id「1」引用的計數,並且在「操作」表中至少還有一個條目?例如。對於referrer_id「1」,「1723」和「1724」在「動作」表中至少有1行,但不是「1725」。因此對於用戶「1」,他已成功引用2個用戶,即使還有「 1725" 。
希望是有道理的。
在這裏你去:
SELECT
COUNT(DISTINCT r.new_user_id)
FROM
referral r
JOIN actions a ON a.fk_userid = r.new_user_id
WHERE
r.referrer_id = 1;
使用JOIN,你知道,如果有一個排,那麼至少1行中的JOIN表匹配。您可以結合起來,與一個GROUP BY拉。唯一的ID我有一種感覺,這可能是一個更有效的方式,但是,想到的第一件事就是:
SELECT
COUNT(referrals.new_user_id)
FROM
referrals
JOIN actions ON actions.user_id = referrals.new_user_id
WHERE
referrals.referrer_id = 1
GROUP BY referrals.new_user_id;
編輯:思考了一下,假設後,一切都被索引,一世想不到更有效的解決方案。一些輕微的谷歌搜索表明COUNT(DISTINCT referrals.new_user_id)可能會更快,而不是使用GROUP BY。
這將是更容易理解你的問題,如果你添加的架構,可以走進去。您可以通過運行'explain actions'或'show create table actions'來獲得表格定義。併爲另一個表做同樣的事情。 – 2011-12-18 04:51:24
這裏是「行動」 - http://d.pr/BHne,這裏是「推薦」 - http://d.pr/V2Ei。 – 2011-12-18 05:05:56
科爾賓的解決方案不適合你嗎? – 2011-12-18 05:29:05