For performance sake I'd recommend having a table configured just like your first 
example minus referer as well as a seperate table that is:

(table references)
id
referer
int level

Anytime you add a new user you climb the chain until you hit the top of the chain, for 
each user you pop in an id, referer combination. Level would be how far away the user 
is or which recursion you're on. That way to get a list of referers within N 
generations you would say:

select * from references left join people on references.referer = people.id where id = 
thePersonIAmLookingFor and level <= N

This does mean all inserts must occur in this way or you would have to process the 
existing data to create the references table.
... there may of course be a better way. :-)

<>< Ryan


-----Original Message-----
From: Daren Cotter [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, September 25, 2002 12:08 PM
To: [EMAIL PROTECTED]
Subject: [PHP-DB] Multiple Referral Levels


I'm using MySQL to attempt to track multiple referral
levels for a web site. I.e., member 1 refers 2, 2
refers 3, 3 refers 4...member 4 is is on member 1's
3rd referral level.

Anyway, I need to be able to compile a list of the #
of referrals for a specific member on any given level
(up to 12 levels), and I'm trying to determine the
best database setup. I know that a normalized setup
could be:

table:
id int unsigned not null auto_increment
referer int unsigned null
primary key (id)
key (referer)

With this setup, inserting new members would be no
problem. Grabbing the number of referrals for a member
on level 1 would be easy:
SELECT count(*) FROM table WHERE referer = 1
Second level wouldn't be too difficult either, using a
join, but 3rd level and on would be done how? Is it
even possible? I'm aware I could setup some sort of
recursive function, but if a member has 5,000
referrals on level one, I certainly don't want to run
5,000 queries and total the results to get level 2.

So perhaps a design more like:
id
ref1
ref2
ref3
etc
would be better? It's not normalized, but it might do
the job...querying any member's referrals for a
specific level would be no problem. The signup process
would have a bit more work to do, because it'd have to
recursively find the referer all the way up of course.

Bottom line, is I'm looking for the best database
setup that will accomodate my needs (I NEED to be able
to run a queyr that shows me the # of referrals broken
down by level for a member).

Ideally, the # of referral levels would be variable,
meaning the database should not be setup in a way to
accomodate x referral levels, but instead should
accomodate 0-12.

I know there are websites that achieve this (whether
they use MySQL, I don't know)...can anyone offer any
insight?



__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to