2012-04-28 2 views
0

Обновление: я понял. См. Мой ответ ниже.php логика для следящего/следящего устройства

Я пытаюсь написать некоторую логику на уровне приложения, чтобы идентифицировать друзей (взаимных подписчиков) в таблице ниже. Мой запрос возвратил данные в формате, аналогичном таблице ниже (заимствованные из this вопрос, но я не нужен запрос, эта часть будет сделано):

A B 
1 2 // mutual followers, so "friends" 
2 1 // mutual followers, so "friends" 
1 3 // user 1 is following 3 
1 4 // user 1 is following 4 

Так как я могу написать некоторую логику, которая показывает пользователей, где A = B и B = A, но в разных строках? Использование PHP/codeigniter.

В ответ на просьбу, вот таблицы SQL и запрос:

Users table - uid, fname, lname 
Followers table - user_id, follow_id 

Select users.uid, users.fname, users.lname, u.uid, u.fname, u.lname 
FROM users 
INNER JOIN follows f on (f.user_id=users.uid) 
INNER JOIN users u on (u.uid=f.follow_id) 
+0

Вы спрашиваете, как запустить SQL-запрос, представленный в примере, к которому вы привязались? – Claudiu

+0

Нет. У меня есть запрос, и он дает результаты ниже. (Это другой запрос). Просто пытаюсь создать логику. – chowwy

+0

Что вы имеете в виду в разных строках? Каков ожидаемый результат? – Claudiu

ответ

1

Хорошо, я понял. Мне понадобилась вторая INNER JOIN для таблицы последователей. Я добавил код ниже в свой SQL-запрос, и он сработал.

INNER JOIN followers f2 ON u.id = f2.user_id AND users.id = f2.follow_id 
+0

Рад видеть это в действии. Приветствия. – philwinkle

+0

Благодарим вас за помощь раньше - не смогли бы это сделать иначе. После того как я использовал ваше исправление, я попробовал логику приложения и просто не мог заставить его работать. Кто-то предложил сделать это в mySQL (чего я не хотел делать), но я пару минут занимался этим и, наконец, получил его. – chowwy

1

Я думаю, вы хотите что-то вроде этого:

$results = array(array(1,2),array(2,1),array(1,3),array(1,4)); 
$mutual_users = array_filter($results,function($elem)use($results){ 
    if(in_array(array_reverse($elem),$results)){ 
     return true; 
    } 
}); 
print_r($mutual_users);