我正在建立一个联盟系统,我已经将数据库的设计叠加在一起。我不知道如何跟踪招募谁的人。可以说我们有类似的东西:
这一切都是这样的: 1.Jon招募Alex,Alex招募Jim,Marko和Johny。 2.Jon招募了Pit,Pit Recruited Sara,Gabriella和Antonio。 3.Jon招募了Maja,Maja招募了Agon。 Agon可以招募一些人,而且可以招募一些人,这种情况无限深入。
是否有人知道如何解决这个问题。如何设计表格?
答案 0 :(得分:2)
只需使用自引用表,其中包含ID和recruitedbyid:
ID Name RecruitedBy 1 Jon Smith null 2 Alex Del 1 3 Marko Polo 1 ...
您没有提到您正在使用的数据库,但SQL Server 2008具有适合这些情况的分层数据类型hierarchyid。
答案 1 :(得分:1)
因此,Alex Dell与JonSmith有关系,他雇用了他。这是一种非常标准的CRM方法。
答案 2 :(得分:1)
创建两列:
使用几行代码可以轻松制作树形图。
编辑:既然你问过,这里有一些树形图的代码。我之所以选择PHP,是因为MySQL查询很容易实现,但这个概念很容易用Java,C,Ruby,Python等完成。
function listUsers($handler, $id, $prefix) {
// Please use MySQLi extension with prepared statements or your code
// becomes SQL injection paradise
$results = mysql_query("SELECT `user`, `referrer` FROM `users` WHERE `referrer` = $id");
while ($row = mysql_fetch_row($results) {
echo $prefix . $row[0];
listUsers($handler, $$row[1], $prefix . "* ");
}
}
$handler = mysql_connect(. . .);
listUsers($handler, 0, "")
我80%确定逻辑在正确实施时能够正常工作。 应该返回:
/*
Jon smith
* Alex Del
* * Jim West
* * Marko Polo
* * Johny Bravo
* Pit Sampras
* * Sara Mat
* * Gabriella white
* * Antonio Santo
* Maja Grozdanova
* * Agon Xheladini
*/