RE: [PHP-DB] Multiple Referral Levels
| From: | USA) | Date: | Wed, 25 Sep 2002 18:21:55 +0000 |
| Subject: | RE: [PHP-DB] Multiple Referral Levels | ||
| Groups: | php.db | ||
| Request: | Send a blank email to php-db+get-21981@lists.php.net to get a copy of this message | ||
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:daren_cotter@yahoo.com]
Sent: Wednesday, September 25, 2002 12:08 PM
To: php-db@lists.php.net
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