Соединение результатов по дате. Можно ли это сделать? - PullRequest
0 голосов
/ 16 сентября 2011

ОК, поэтому я постараюсь быть как можно более подробным и конкретным.

У меня есть таблица.MemberConnections
У него есть 3 столбца - member1, member2, date

Так что это то, чего я не могу понять.

Я хочу иметь возможность выбирать даты поиска.Пример даты с 6 июня 2011 года по 17 июня 2011 года.Затем я хочу иметь возможность ввести memberID и получить список всех подключений, которые были сделаны «к» или «этим» участником в течение диапазона дат.

Пример:

6/14/11

  • member1 соединяется с member2

6/15/11

  • member2 соединяется с member4
  • member4 соединяется с member6

6/16/11

  • member2 соединяется с member5
  • member1 соединяется с member11

6/17/11

  • member 6 соединяется с member7
  • member6соединяется с member8
  • member16 соединяется с member18

6/18/11

  • member3 соединяется с member9
  • member5 соединяется с member10
  • member12 соединяется с member14

Надеюсь, это имеет смысл.

Хорошо, так что теперь, когда я ввожу датыи UserID должен вернуть всеСериды, которые есть и соединились с даты начала.

Итак, следуя моему примеру выше.

Список будет включать: member1, member2, member3, member4, member5, member6, member7, member8, member8, member9, member10 и member11

Но member12, member14, member16 и member18 не будут отображаться, поскольку они не соединяются с кем-либо, кто был связан с USERID, который искали.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2011

Если предположить, что соответствующий идентификатор пользователя представлен $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 автоматически удаляет любые дубликаты.

0 голосов
/ 17 сентября 2011
$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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...