【发布时间】:2015-11-10 09:09:45
【问题描述】:
我有点问题...
所以我要做的是:
我有一个用户表:
-------------------------
| Table: userlist |
-------------------------
| Id | GuestOf | User |
|-----------------------|
| 0 | System | Bill |
|-----------------------|
| 1 | Bill | Jason |
|-----------------------|
| 2 | Jason | Jack |
|-----------------------|
| 3 | Jason | Jill |
|-----------------------|
| 4 | Jack | Matt |
|-----------------------|
| 5 | Jill | Stu |
|-----------------------|
| 6 | Jack | Gwen |
|-----------------------|
| 7 | Jill | Frank |
|-----------------------|
基本上,Jason 的客人是 Jack 和 Jill,Jack 的客人是 Matt 和 Gwen,Jill 的客人是 Stu 和 Frank。
现在我要做的是找出 Jason 的客人是否都有两个客人。
但我只能在每次将新客人添加到列表时检查这一点。在这种情况下,当 Frank 被 Jill 添加到列表中时。
这是我目前使用的代码:
function countGuests($User) {
$sql = "SELECT COUNT(`Id`) CntId FROM `userlist` WHERE `GuestOf` LIKE '$User'";
$res = mysql_query($sql);
$temp = mysql_fetch_array($res, MYSQL_BOTH);
return $temp["CntId"];
}
function checkCompletion($UserId) {
$population = array();
$sql = "SELECT `User` FROM `userlist` WHERE `GuestOf` LIKE '$UserId'";
$res = mysql_query($sql);
if (mysql_num_rows($res) > 0) {
while ($temp = mysql_fetch_array($res, MYSQL_BOTH)) {
$population[] = $temp["User"];
}
$partialPop = 0;
for ($i = 0; $i < count($populaton); ++$i) {
$partialPop = $partialPop + countGuests($population[$i]);
}
}
return $partialPop;
}
结果应该是:7(Jason、Jack、Jill、Matt、Gwen、Stu、Frank)
但是,我得到的结果是:0。我的查询有什么问题?
如果有任何帮助/更正,我将不胜感激......
谢谢!
【问题讨论】:
-
你考虑过重建你的数据库吗?关系的奇怪方法
-
您应该创建一个包含客人关系的表格。在这个基本示例中没有太大区别,但是当您开始向表中添加信息(性别、地址、日期等)时,这个问题很重要。
-
AFAIK,这个表是分层的。看看这个 id = 0 (system): 是所有结构的根。您缺少重要信息。请求的信息是检索系统中所有客人的列表???如果这是问题,您应该从考虑递归函数开始。
-
@RaulLuna:我想知道 Jason 的客人(杰克和吉尔)是否各有 2 位客人。比尔进来的时候没有其他人,所以他是系统的客人。
-
@Strawberry:不,这个说法是正确的。弗兰克是用户,他是吉尔的客人。所以当弗兰克作为吉尔的客人进入名单时......