Регистрация
Вход через соцсети
Восстановление пароля

Помогите получить массив друзей (взаимных)

Новый топик
02.09.2012, 06:48
Ответить | Цитировать
Гость
Гость

По умолчанию в списке друзей отображаются все кого юзер добавил в друзья.
А мне хотелось бы получить список тех, кого юзер добавил, и в ответ тот тоже добавил этого юзера. Т.е. оба пользователя друг друга добавили в друзья.
Если я правильно понимаю, единственный способ это сделать, переписать функцию nc_auth_get_all_relation
Цитата:
/**
* Вернуть все отношения пользователя
*
* @param int User_ID - индетификатор пользователя. По умолчанию - текущий
* @return array [related_id] => type
*/
function nc_auth_get_all_relation($User_ID = 0, $reset = 0, $output_all = 0) {
global $db, $current_user;

// статические массивы
static $init; // флаги инициализации
static $relation; // результат выполнения функции
// приведение к целому типу
$User_ID = intval($User_ID);

// пользователь по умолчанию
if (!$User_ID) $User_ID = $current_user['User_ID'];

// результат в статичнском массиве нет
if (!$init[$User_ID] || $reset) {
$result = $db->get_results("SELECT a.`Related_ID`, a.`Type` as `ncRelType`, u.*
FROM `Auth_UserRelation` as `a`, `User` AS `u`
WHERE u.User_ID = a.Related_ID
AND a.`User_ID` = '".$User_ID."'", ARRAY_A);

$init[$User_ID] = true;
$relation[$User_ID] = array();

// проход по результату
if (!empty($result))
foreach ($result as $row) {
$relation[$User_ID][$row['Related_ID']] = $row;
}
}

if ($output_all) {
return $relation[$User_ID];
} else {
$res = array();
foreach ($relation[$User_ID] as $v)
$res[$v['Related_ID']] = $v['ncRelType'];
return $res;
}
}
Подскажите, как изменить эту функцию...
03.09.2012, 11:30
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Ф-ию менять не обязательно, можно эту инфу получить отдельным запросом, что-то типа (проверяйте сами, я не тестил):
Код:

select u.*
from Auth_UserRelation r,
User u
where r.Related_ID = u.User_ID
and r.User_ID = $User_ID
and r.Type = $relation_type
and exists (
select 1
from Auth_UserRelation r2
where r2.User_ID = r.Related_ID
and r2.Related_ID = r.User_ID
and r2.Type = $relation_type
)

где
$User_ID - ИД юзера, для которого ищите
$relation_type - тип связи (сами подставьте значение, которое определяет, что юзеры = друзья)

Temet nosce...
03.09.2012, 15:15
Ответить | Цитировать
Гость
Гость

А можно подробнее? Я в подобных запросах плохо понимаю...
Где его выполнять, и как?
03.09.2012, 17:17
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Где
- Выполнять можно где угодно - можно в макетах дизайна, можно в компонентах, либо в своих собственных пхп скриптах.
Как
- См. описание ф-ий listQuery(), $db->get_results()

А там уж сами смотрите, ф-ию nc_auth_get_all_relation() вы ж где-то выполняете и результат как-то обрабатываете...

Temet nosce...
04.09.2012, 15:29
Ответить | Цитировать
Гость
Гость

Оказывается Кот и так умеет проверять взаимных друзей функцией nc_auth_is_mutual )))
Теперь у меня другая проблема... Как при просмотре страницы пользователя (action==full), отобразить всех юзеров, которые добавили его в друзья?
198 196 2012-09-04 15:29:11 12549
Описание проекта