/** * あしあとリスト取得 * 同一人物・同一日付のアクセスは最新の日時だけ * * @param int $c_member_id_to 訪問された人 * @param int $limit * @return array あしあとリスト */ function db_ashiato_c_ashiato_list4c_member_id($c_member_id_to, $count) { $sql = 'SELECT DISTINCT r_date FROM c_ashiato WHERE c_member_id_to = ? ORDER BY r_date DESC'; $params = array(intval($c_member_id_to)); $days = db_get_col_limit($sql, 0, $count, $params); $sql = 'SELECT DISTINCT c_member_id_from, MAX(r_datetime) AS r_datetime' . ' FROM c_ashiato WHERE r_date = ? AND c_member_id_to = ?' . ' GROUP BY c_member_id_from ORDER BY r_datetime DESC'; $result = array(); foreach ($days as $day) { $params = array(strval($day), intval($c_member_id_to)); $day_result = db_get_all_limit($sql, 0, $count, $params); $result = array_merge($result, $day_result); $count -= count($day_result); if ($count <= 0) { break; } } foreach ($result as $key => $value) { $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']); $result[$key]['nickname'] = $c_member['nickname']; } return $result; }
/** * あしあとを付けたメンバの一覧をメンバプロフィールも含めて取得する * @param $c_member_id_to あしあとを付けられたメンバーID * $count 取得データの最大数 * $profile プロフィール項目 * @return 以下の形式の配列 * array ( array( prifile1 => value) [, array( profile2 => value), ...]) ) */ function op_ashiato_list_c_member_profile($c_member_id_to, $count, $profile) { //「あしあと」を登録したメンバーIDを「あしあと」登録日の新しいものの順に取得する $sql = 'SELECT DISTINCT r_date FROM c_ashiato WHERE c_member_id_to = ? ORDER BY r_date DESC'; $params = array(intval($c_member_id_to)); $days = db_get_col_limit($sql, 0, $count, $params); if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') { $sql = 'SELECT DISTINCT c_member_id_from, to_char(MAX(r_datetime),\'YYYY/MM/DD HH24:MI:SS\') AS r_datetime' . ' FROM c_ashiato WHERE r_date = ? AND c_member_id_to = ?' . ' GROUP BY c_member_id_from ORDER BY r_datetime DESC'; } else { $sql = 'SELECT DISTINCT c_member_id_from, DATE_FORMAT(MAX(r_datetime),\'%Y/%m/%d %H:%i:%s\') AS r_datetime' . ' FROM c_ashiato WHERE r_date = ? AND c_member_id_to = ?' . ' GROUP BY c_member_id_from ORDER BY r_datetime DESC'; } $member_list = array(); foreach ($days as $day) { $params = array(strval($day), intval($c_member_id_to)); $day_result = db_get_all_limit($sql, 0, intval($count), $params); $member_list = array_merge($member_list, $day_result); $count -= count($day_result); if ($count <= 0) { break; } } //プロフィールを取得 $list = array(); foreach ($member_list as $key => $value) { //メンバ情報の取得 $c_member = OP::op_get_member_data_list($value['c_member_id_from']); //デフォルト項目(メンバId、ニックネーム、登録日) $list_mem = array('mid' => $value['c_member_id_from'], 'nickname' => $c_member['nickname'], 'datetime' => $value['r_datetime']); //メンバのプロフィールを取得する $prof_list = OP::op_get_member_profile_list($value['c_member_id_from']); //取得指定のプロフィールを設定する $prof_arry = split(',', $profile); foreach ($prof_arry as $profile_name) { $prof_key = strtolower(trim($profile_name)); $prof_val = ''; //プロフィール文字列と一致するプロフィールを探す $is_search = FALSE; foreach ($prof_list as $val) { if ($val['name'] == $prof_key) { $is_search = TRUE; //プロフィールの公開区分をチェックする if ($val['public_flag'] == 'public') { $prof_val = $val['value']; } } } //プロフィールテーブルに無い項目? if ($is_search == FALSE) { if ($prof_key == 'birthday') { if ($c_member['public_flag_birth_year'] == 'public') { $prof_val = $c_member['birth_year'] . '/' . $c_member['birth_month'] . '/' . $c_member['birth_day']; } } } //項目を追加 $list_mem = array_merge($list_mem, array($prof_key => $prof_val)); } //返却値リストに追加 array_push($list, $list_mem); } return $list; }