按日期连接结果 - 甚至可以这样做吗?

时间:2011-09-16 19:55:49

标签: php mysql search

好的,所以我会尽量详细和尽可能地说明。

我有一张桌子。 MemberConnections
它有3列 - member1,member2,date

所以这是我无法想象的事情。

我希望能够选择搜索日期。示例日期6/14/11 - 6/17/11。 然后,我希望能够输入一个memberID,并获得在该日期范围内已成为'到'或'由'成员所有连接的列表。

示例:

11-6-14

  • member1与member2
  • 连接

11年6月15日

  • member2与member4
  • 连接
  • member4与member6
  • 连接

11年6月16日

  • member2与member5连接
  • member1与member11
  • 连接

11年6月17日

  • 成员6与member7连接
  • member6与member8
  • 连接
  • member16与member18
  • 相关联

11年6月18日

  • member3与member9
  • 连接
  • member5与member10连接
  • member12与member14
  • 连接

希望这是有道理的。

好的,现在当我输入日期和用户ID时,它应该返回自开始日期以来已经连接的所有用户ID。

按照上面的例子进行。

列表包括:member1,member2,member3,member4,member5,member6,member7,member8,member9,member10和member11

但是member12,member14,member16和member18不显示,因为他们没有与任何与搜索到的USERID相关联的人连接。

2 个答案:

答案 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会自动删除任何重复项。

相关问题