Всем привет! Столкнулся с таким вопросом... Сделал таблицу пользователей и таблицу друзей.
Таблица друзей выглядит так:
id - ID записи в таблице
user_id - пользователь отправивший заявку
friend_id - пользователь которому отправили заявку
status - 1 == друг, 2 == еще не принятая заявка
Все бы ничего, но когда нам нужно проверить, является ли один пользователь другом второго, приходится делать вот такой страшный запрос, потому как пользователь мог пригласить и пользователя могли пригласить в друзья.
SELECT f.`status`
FROM `friends` f
WHERE
(f.`user_id` = 111 AND f.`friend_id` = 222)
OR
(f.`user_id` = 222 AND f.`friend_id` = 111)
Так же проблема возникает, когда нужно сделать JOIN, приходится делать такой:
LEFT JOIN `friends` ON (f.`user_id` = 111 AND f.`friend_id` = 222) OR (f.`user_id` = 222 AND f.`friend_id` = 111)
И хуже всего, когда нужно вывести список друзей (для пользователя 111), тогда в SELECT приходится добавлять что-то подобное, чтобы получить ID друга:
IF(f.`user_id` = 111, f.`friend_id`, f.`user_id`) as friend_id