我有一个表,看起来像这样 - 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