2011-12-18 57 views
0

我有一個表,看起來像這樣 - http://d.pr/jQ1P,然後另一個表(我們稱之爲「動作」表),其中包含所有用戶已完成的事情列表。如何爲以下方案編寫查詢?

如何編寫一個查詢,可以給我一個有多少新用戶referrer_id「1」引用的計數,並且在「操作」表中至少還有一個條目?例如。對於referrer_id「1」,「1723」和「1724」在「動作」表中至少有1行,但不是「1725」。因此對於用戶「1」,他已成功引用2個用戶,即使還有「 1725" 。

希望是有道理的。

+2

這將是更容易理解你的問題,如果你添加的架構,可以走進去。您可以通過運行'explain actions'或'show create table actions'來獲得表格定義。併爲另一個表做同樣的事情。 – 2011-12-18 04:51:24

+0

這裏是「行動」 - http://d.pr/BHne,這裏是「推薦」 - http://d.pr/V2Ei。 – 2011-12-18 05:05:56

+0

科爾賓的解決方案不適合你嗎? – 2011-12-18 05:29:05

回答

2

在這裏你去:

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; 
2

使用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。