好的,所以我会尽量详细和尽可能地说明。
我有一张桌子。 MemberConnections
它有3列 - member1,member2,date
所以这是我无法想象的事情。
我希望能够选择搜索日期。示例日期6/14/11 - 6/17/11。 然后,我希望能够输入一个memberID,并获得在该日期范围内已成为'到'或'由'成员所有连接的列表。
示例:
11-6-14
11年6月15日
11年6月16日
11年6月17日
11年6月18日
希望这是有道理的。
好的,现在当我输入日期和用户ID时,它应该返回自开始日期以来已经连接的所有用户ID。
按照上面的例子进行。
列表包括:member1,member2,member3,member4,member5,member6,member7,member8,member9,member10和member11
但是member12,member14,member16和member18不显示,因为他们没有与任何与搜索到的USERID相关联的人连接。
答案 0 :(得分:0)
$member = $_GET['member'];
$date = $_GET['date'];
$firstRows = getMemberConnections($member)
$connections = array_merge($firstRows, getTree($firstRows));
$connectedMembers = array();
foreach ($connections as $connection)
{
$connectedMembers[] = $connection['member1'];
$connectedMembers[] = $connection['member2'];
}
$connectedMembers = array_unique($connectedMembers);
print_r($connectedMembers);
function getTree($rows)
{
$subTree = array();
foreach ($rows as $row)
{
$subTree[] = getMemberConnections($row['member1']);
$subTree[] = getMemberConnections($row['member2']);
}
$subTree = array_unique($subTree);
$subTree = array_merge($subTree, getTree($subTree));
return $subTree;
}
function getMemberConnections($member)
{
global $date;
$rows = array()
$result = mysql_query("SELECT member1, member2 FROM MemberConnections WHERE (member1='$member' or member2='$member') and date >= '$date'") or die mysql_error();
while ( $row = mysql_fetch_assoc($result) )
{
$rows[] = $row;
}
return $rows;
}
答案 1 :(得分:0)
假设相关用户ID由$userID
表示,日期范围由$lo_date
和$hi_date
表示,那么您可以使用:
SELECT Member1 AS Member
FROM MemberConnections
WHERE Member2 = $userID
AND Date BETWEEN $lo_date AND $hi_date
UNION
SELECT Member2 AS Member
FROM MemberConnections
WHERE Member1 = $userID
AND Date BETWEEN $lo_date AND $hi_date;
请注意,UNION会自动删除任何重复项。