级联查找成员资格的根referer-PHP/MySQL查询
我运行的会员网站和mySQL数据库字段有ID、refereid和rootid字段要知道 谁邀请谁,谁推荐谁 当新成员注册时,在新成员记录中,我将她的邀请者成员id写在参考id中 反过来,A邀请B,B邀请C,C邀请D,D邀请E E有正确的字段引用id作为数据库中D的id 我想要E的rootid字段中的A的id,它是原始的invitor 这就像是下线建设,但我不能正确地填写我的3个查询,其中需要invitor的refereid,并找到他们的rootid和设置在自己的rootid字段rootid字段 如果我能以某种方式保存邀请树和下线,那会更好级联查找成员资格的根referer-PHP/MySQL查询,php,mysql,cascade,Php,Mysql,Cascade,我运行的会员网站和mySQL数据库字段有ID、refereid和rootid字段要知道 谁邀请谁,谁推荐谁 当新成员注册时,在新成员记录中,我将她的邀请者成员id写在参考id中 反过来,A邀请B,B邀请C,C邀请D,D邀请E E有正确的字段引用id作为数据库中D的id 我想要E的rootid字段中的A的id,它是原始的invitor 这就像是下线建设,但我不能正确地填写我的3个查询,其中需要invitor的refereid,并找到他们的rootid和设置在自己的rootid字段rootid字段
困惑于如何从这里开始如果我没有弄错的话,这就是你所描述的
CREATE TABLE members
(
id INT UNSIGNED AUTO_INCREMENT NOT NULL,
refer_id INT UNSIGNED,
rootrefer_id INT UNSIGNED,
name VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
);
/*Adam is an original member and was not reffered by anyone.*/
INSERT INTO members (name) VALUES ('adam');
/*
Barbara is referred by Adam her id = 2
her refer_id, and rootrefer_id = 1
*/
INSERT INTO members (name, refer_id, rootrefer_id)
VALUES('barbara', 1, 1);
/*
Cindy is referred by Barbara her id = 3,
her refer_id = 2, her rootrefer_id = 1, just like Barbara
*/
INSERT INTO members (name, refer_id, rootrefer_id)
VALUES('cindy', 2, 1);
/*
Cindy in turn refers Dan, Dans id = 4
his refer_id = 3, and his rootrefer_id = 1
*/
INSERT INTO members (name, refer_id, rootrefer_id)
VALUES ('dan', 3, 1);
/*
Dan invites his pal Eddie, Eds id = 5
his refer_id = 4, and his rootrefer_id also = 1
*/
INSERT INTO members (name, refer_id, rootrefer_id)
VALUES ('eddie', 4, 1);
您可以这样查询:
#select original, non-refered members
#SELECT * FROM members WHERE refer_id IS NULL;
#select referred members
#SELECT * FROM members WHERE refer_id IS NOT NULL;
#select all referers and refered
SELECT
m1.id AS ref_id,
m1.name AS ref_name,
m2.id AS id,
m2.name AS name
FROM members m1
JOIN members m2 ON m1.id=m2.refer_id;
#selct all root referers and refered
SELECT
m1.id AS root_id,
m1.name AS root_name,
m2.id AS id,
m2.name AS name
FROM members m1
JOIN members m2 ON m1.id=m2.rootrefer_id;
#select all referers who are also referred, their referers and referred
SELECT
mrr.id AS referrer_id,
mrr.name AS referrer_name,
m.id AS id,
m.name AS name,
mrd.id AS refered_id,
mrd.name AS refered_name
FROM members m
JOIN members mrr ON mrr.id=m.refer_id
JOIN members mrd ON m.id=mrd.refer_id;
试试看你费了不少劲,谢谢你,但是根id不能随新成员一起插入,它要在以后处理时“找到”——让我再解释一下。亚当邀请了芭芭拉,芭芭拉邀请了辛迪,所以1,亚当,是第一张唱片,第二张是2,芭芭拉,1,第三张是3,辛迪,2,现在我们希望最后一张唱片是3,辛迪,2,1,当我们找到芭芭拉的父母时,从芭芭拉的唱片中取1。cindy的孩子也应该把1作为根id,因为这个链中的第一个邀请者是adam(id 1)。我将实现这一行:-它在数学上保持对父母和孩子的跟踪,直到第n个级别