2014-11-02 1 views
0

У меня есть две таблицы: члены и member_requests. Когда член отправляет другому члену запрос друга, строка вставляется в таблицу member_requests. Если получатель принимает запрос, статус обновляется до 1. Если человек отклоняет запрос, он будет удален. Я попробовал много разных запросов для создания списка друзей для определенного пользователя, но ни один из них не работает правильно. Либо author_id запроса должен быть идентификатором текущего члена, либо идентификатор получателя должен быть идентификатором текущего члена. Может ли кто-нибудь предоставить запрос, который мог бы это сделать?Как я могу использовать MySQL для получения списка друзей в зависимости от статуса запроса друга?

http://sqlfiddle.com/#!2/021d7/13

    SELECT 
         r.request_id, r.author_id, r.recipient_id, r.status, 
         m.member_id, m.display_name 
        FROM member_requests AS r 
        LEFT JOIN members AS m ON (r.author_id = m.member_id OR r.recipient_id = m.member_id) 
        WHERE r.status = 1 
        ORDER BY m.display_name 
+0

Вы пытались использовать условие «НЕ IN»? Что-то вроде 'SELECT * FROM друзей друзей участника WHERE friend_id NOT IN (прямые друзья-члены SELECT)'? –

+0

Если вы видели мое сообщение до того, как я его отредактировал, пожалуйста, прочитайте еще раз. Я понял, что запрос, который у меня был, на самом деле не подружился, он получал всех участников. – ShoeLace1291

+0

Итак, если я правильно понял (после вашего редактирования) - Вы хотите получить список всех текущих друзей определенного члена? То есть - список всех запросов, содержащих «меня» (как автора или получателя дружбы) и имеющих статус «1»? –

ответ

1

Это не так уж плохо на всех. То, что вы можете сделать, это получить список всех случаев, когда пользователь отправил запрос, и он был принят, а также список всех запросов пользователя, которые были получены, и это было принято, и объединить эти два результата вместе.

Попробуйте это:

(SELECT recipient_id 
FROM member_requests 
WHERE author_id = 1 AND status = 1) 
UNION 
(SELECT author_id 
FROM member_requests 
WHERE recipient_id = 1 AND status = 1); 

Вот ваш SQL Fiddle назад.

+0

Спасибо! Я отправлю еще один вопрос о поиске через членов, которые не являются друзьями текущего участника ... Если вы хотите получить быстрый ответ ... lol. – ShoeLace1291

Смежные вопросы