好的,所以我会尽可能的详细和重点。
我有张桌子。MemberConnections
它有3列-- member1、member2、date
所以这就是我想不出的。
我想选择搜索日期。示例日期为6/14/11-6/17/11。然后我希望能够输入一个memberID,并获得该成员在日期范围内所做的所有连接的列表。
示例:
6/14/11
连接
6/15/11
member4
6/16/11
member5
6/17/11
member7
连接
6/18/11
member9
连接
希望这是合理的。
现在,当我输入日期和一个UserID时,它应该会返回所有从开始日期起就已经连接的用户I。
所以,按照我上面的例子。
名单将包括: member1、member2、member3、member4、member5、member6、member7、member8、member9、member10和member11
但是member12、member14、member16和member18不会显示,因为它们没有连接到被搜索的用户did中的任何人。
发布于 2011-09-16 20:50:48
$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;
}
发布于 2011-09-16 21:12:59
假设相关的用户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自动消除任何副本。
https://stackoverflow.com/questions/7449723
复制相似问题