Referalsystem *Denksanstoß*

caschti84

Grünschnabel
Tagchen!

Ich brüte schon seit einigen Tagen darüber ein Referalsystem zu programmieren. Da ich mich scheue, mir sowas bei anderen Scripten abzugucken, bin ich auf der Suche nach Denkanstößen, wie die DB Struktur und wie ich ds generell am besten strukturiere, damit jeder User 3 Refebenen hat.
Eine Refebene ist ja kein Problem, aber mir fehlt das logische zündlein für 3 Refebenen!

Würde mich über ein paar Anregungen freuen!

mfg
Caschti84
 
also:

User 1 meldet sich an. Über einen Reflink meldet sich User 2 über User 1 an. User 2 landet dann in der 1.Ebene von User 1. Jede user, der von User 1 geworben wird landet automatisch in der 1. Ebene von User 1. Nun wirbt User 2 den User 3. User 3 kommt dann in die 2.Ebene von User 1. User 3 kommt aber auch in die 1. Ebene des User 2. Wenn nun User 3 einen wirbt (User 4) landet der bei User 1 in der 3. Ebene, bei User 2 in der 2. Ebene und bei User 3 in der 1.Ebene.
Das ganze soll beschränkt sien auf 3 Ebenen. Das heißt jeder user hat nur 3 Ebenen, in denen user rein "gheworben" werden können.

Hoffe das war verständlich!
 
Verknüpfe User an User. DH
User 2 (ID:2) meldet sich über User 1 Reflink an. Dh User 1 bekommt einen Eintrag in der Ref Tabelle:
user | ref
1 | 2
Jetzt meldet sich User 3 über nen Reflink von User 2 an. Nun bekommt User 2 nen Eintrag:
user | ref
2 | 3

So verknüpft sich alles untereinander.
wurde dann so ausschaun
1 Ebene
$abf = mysql_query("SELECT * FROM ref JOIN usertabelle WHERE user = $userid AND ref = usertabelle.userid");
echo "<b>Ebene1</b>";
while($row = mysql_fetch_array($abf)){
//2ebene
$abf2 = mysql_query("SELECT * FROM ref JOIN usertabelle WHERE user = $row[ref] AND ref = usertabelle.userid");
while($row2 = mysql_fetch_array($abf2){
usw..
}

}
 
Katzehuhn hat gesagt.:
Verknüpfe User an User. DH
User 2 (ID:2) meldet sich über User 1 Reflink an. Dh User 1 bekommt einen Eintrag in der Ref Tabelle:
user | ref
1 | 2
Jetzt meldet sich User 3 über nen Reflink von User 2 an. Nun bekommt User 2 nen Eintrag:
user | ref
2 | 3

So verknüpft sich alles untereinander.
wurde dann so ausschaun
1 Ebene
$abf = mysql_query("SELECT * FROM ref JOIN usertabelle WHERE user = $userid AND ref = usertabelle.userid");
echo "<b>Ebene1</b>";
while($row = mysql_fetch_array($abf)){
//2ebene
$abf2 = mysql_query("SELECT * FROM ref JOIN usertabelle WHERE user = $row[ref] AND ref = usertabelle.userid");
while($row2 = mysql_fetch_array($abf2){
usw..
}

}

Aber so werden doch keine refebenen ausgelesen. So krieg ich ja nur heraus, wieviele Refs über einen Reflink geworben wurden. Würde es reichen, wenn ich dann in jeder zeile dann noch irgendwie die refebene dazu packe, die ich dann irgendwie ermittele?.
Was passiert wenn User 3 User 4 wirbt. Dann bekommt User 1 ja einen User dazu, obwohl dies ja nicht sein dürfte, da es nur 3 Refebenen gibt.

Danke aber trotzdem für deine Antwort!
 
Hallo,

man benötigt hier keine separate Tabelle, um die Verknüpfung abzubilden. Ein zusätzliches Feld in der Benutzertabelle mit der ID des werbenden Benutzers reicht hier.

Die Benutzer, die in den einzelen Ebenen auftauchen, lassen sich dann über zwei Selfjoins abfragen:
SQL:
SELECT
  `level1`.`user_id` AS `level1`,
  `level2`.`user_id` AS `level2`,
  `level3`.`user_id` AS `level3`
FROM `users` `level1`
LEFT JOIN
  `users` `level2` ON (`level2`.`referred_by` = `level1`.`user_id`)
LEFT JOIN
  `users` `level3` ON (`level3`.`referred_by` = `level2`.`user_id`)
WHERE `level1`.`referred_by` = 1
ORDER BY `level1`, `level2`, `level3`
Dadurch erhält man übrigens auch gleich den „Pfad“ zu einem bestimmten geworbenen Benutzer. Einfach mal das Ergebnis der Abfrage mit ein paar Beispieldaten studieren :)

Ich hab es mit folgendem Testschema ausprobiert:
Code:
CREATE TABLE `users` (
  `user_id` int(10) unsigned NOT NULL auto_increment,
  `referred_by` int(10) unsigned default NULL,
  PRIMARY KEY  (`user_id`)
);

Code:
mysql> select * from users;
+---------+-------------+
| user_id | referred_by |
+---------+-------------+
|       1 |        NULL |
|       2 |           1 |
|       3 |           2 |
|       4 |           3 |
|       5 |           4 |
|       6 |           5 |
|       7 |           1 |
|       8 |           1 |
|       9 |           7 |
|      10 |           7 |
|      11 |           8 |
|      12 |           9 |
+---------+-------------+
12 rows in set (0.00 sec)

Grüße,
Matthias
 
hm, das kapier ich nun irgendwie nidde *g*

Wenn ich nun die Spalten darein mache. userid is eh schon vorhanden, nun nur noch reffered_by. Da kommt ja dann die id des werber rein. Aber ich verstehe die SELECT umschreibung irgendwie nicht, wo mach ich denn den unterschied, ob jetzt der user in Refebene des werber is oder in refebene 2 des werber? Zumal, ja wenn der user in Ebene 2 reinkommt, auch irgendwo nen eintrag sein muss, dass dieser werber auch in ebene 3 des werbers des werbers quasi.

oh man...!
 
Hallo,

caschti84 hat gesagt.:
Aber ich verstehe die SELECT umschreibung irgendwie nicht, wo mach ich denn den unterschied, ob jetzt der user in Refebene des werber is oder in refebene 2 des werber? Zumal, ja wenn der user in Ebene 2 reinkommt, auch irgendwo nen eintrag sein muss, dass dieser werber auch in ebene 3 des werbers des werbers quasi.
Hat ein Benutzer als referred_by die user_id des Werbers, so ist er in dessen Ebene 1.
Hat ein Benutzer als referred_by die user_id eines Benutzers, der als referred_by die user_id des Werbers hat, so ist er in dessen Ebene 2.
Hat ein Benutzer als referred_by die user_id eines Benutzers, der als referred_by die user_id eines Benutzers hat, der als referred_id die user_id des Werbers hat, so ist er in dessen Ebene 3.

Es genügt also jeweils die Information, von welchem Benutzer ein anderer Benutzer geworben wurde. Die anderen Informationen kann man sich dann durch entsprechendes „Durchhangeln“ besorgen (wie bei einem gerichteten Graphen).

Grüße,
Matthias
 
Gut, ich werde das mal austesten. Danke schonmal für die antworten!

Bei Erfolg werde ich mich melden ;-)

mfg
Caschti84
 
Zurück