Всем привет! Возникла очередная проблема: не доходит до меня какой запрос в базу выдаст список общих друзей у двух узеров. Есть таблица users и friends. friends связывает юзеров по id. Если есть запись где first=1 and second=2 то юзеры 1 и 2 — друзья. на самом деле там еще дофига свойств типа запросов на дружбу, отказов и т п, но это не важно. ВКонтакте и многих других крупных социальных сетях есть такая вещь как «общие друзья». Пример. U1 дружит с U2 и U3. U3 дружит с U2. Когда U1 заходит на страницу U2, то он должен увидеть в списке общих друзей U3. Вопрос: как это сделать? Очень рассчитываю на помощь и жду
[sql]SELECT first, second FROM friends WHERE first IN (id1, id2) // выбираем всех друзей имеющихся у id1 и id2 GROUP BY second HAVING count(second) > 1 // выводим только тех друзей которые встречаются больше 1го раза (т.е. есть у обоих)[/sql]
и у тебя на одну дружбу две записи или одна? то есть искать дружбу а и б можно только в id1=A and id2=B или добавлять or id1=B and id2=A
потом гляну. просто from friends f1 join friends f2 ON f2.id2=f1.id2 не подойдет? но если запись одна то нужно обрабатывать все варианты - когда нужный ид и справа и слева.
Не мучайся и делай. Друг всегда во 2м поле. Этим ты упростишь логику приложения У тебя не будет миллионов пользователей. Выборка идет исключительно по полям с индексом. Самое тяжелое в запросе это HAVING на конечный результат, который будет в пределах 1-2к записей (можешь взять статистику по среднему количеству друзей с mail.ru, vkontakte.ru). Ну а пользователей с 100к друзей, я думаю ты будешь отстреливать сам. Так что все будет очень быстро.