1
我现在正在处理的项目需要一个参考系统(目前他们有5万个成员)。我决定在会员表中添加ref和ref_id字段。从同一个成员表中计算2个日期之间的新成员
的成员表的结构;
id (int auto),
admin (enum (1,0)),
ref (enum (1,0)),
ref_id (int),
country_id (int),
city_id(int),
town_id(int),
totalRef (int),
fullName (varchar),
registrationDate (datetime)
我想列出在两个日期之间有新成员的查阅者数据。我想提供更多的细节,所以我也尝试在查询中添加国家,城市和城镇。我尝试了下面的查询,但我不认为这是一个很好的方法去考虑它需要很长时间来加载;
SELECT m.id, m.fullName, m.country_id, m.city_id, m.town_id, m.totalRef,
(select name from country where country.id = m.country_id) as countryName,
(select name from city where city.id = m.city_id) as cityName,
(select name from town where town.id = m.town_id) as townName,
(select count(id) from members where members.ref_id = m.id AND ref_id > 0 AND registrationDate BETWEEN '2011.11.04 00:00:00' AND '2011.11.04 23:59:59') as newRef
FROM members as m
WHERE
m.country_id = '224' AND
m.city_id = '4567' AND
m.town_id = '78964' AND
m.admin = '0' AND
m.ref = '1'
ORDER BY newRef DESC
LIMIT 0, 25
如果你能帮我解决这个问题,我会很高兴。先谢谢你。
谢谢您的答复。我试了一下,但有一个错误。 'LEFT JOIN( SELECT COUNT(ID)newRef FROM成员 WHERE REF_ID> 0 AND registrationDate '之间2011.11.04 00:00:00' AND '2011.11.04 23时59分59秒' GROUP BY REF_ID )M 2 在m2.ref_id上的m2.ref_id = m.id'上找不到列。我在'm2.ref_id = m.id'前添加了'r'成员,并将其改为'r.id = m.ref_id'。仍然不起作用:( – Revenant
是的,当然,这个ref_id字段应该被添加到SELECT列表中,我错过了它,我修改了答案 – Devart
谢谢你的作品像一个魅力和快速添加'newRef> 0'和得到了结果,我一开始并不想使用'JOINS',我不知道这些表会变得多大,所以我只是想避免使用'JOINS',但事实证明我的查询比'JOINS',再次感谢你。 – Revenant