2016-04-17 2 views
0

У меня есть две таблицы, одна из которых называется пользователями, а другая - сообщениями в одной базе данных mysql.Простой sql-запрос не возвращает соответствующее значение

Я пытаюсь создать «поток», который находится между двумя пользователями, выбрав сообщение и имя вместе с идентификатором отправителя/пользователя для дополнительной информации.

Пользователи выглядит примерно так:

_id, Name 
1  Mike 
2  Chris 
3  Agnes 
.. .... 

сообщения похож на это:

_id, sent_id, user_id, message 
1  1 2  Hello 
2  2 1  Sup 
3  3 2  Goodbye 
.. ... 

Текущий запрос заключается в следующем:

SELECT users.name, messages.message, messages.user_id as user, messages.sent_id as sender 
      FROM messages, users 
      WHERE users.user_id = messages.user_id 
      AND (messages.user_id = $senderID AND messages.sent_id = $userID) 
      OR (messages.user_id = $userID AND messages.sent_id = $senderID); 

Он работает, как он посылает правильные сообщения; однако он возвращает все имена пользователей, а не те, которые связаны с сообщением.

+0

попробовать использовать присоединиться, что-то вроде этого из сообщений РЕГИСТРИРУЙТЕСЬ пользователей ПО messages.user_id = user.user_id WHERE ... –

ответ

0

Вам нужно добавить строку для фильтрации пользователей:

AND users.user_id in ($userID, $senderID) 
0
SELECT users.name, messages.message, messages.user_id as user, messages.sent_id as sender 
FROM messages join users 
WHERE users.user_id = messages.user_id 
AND (messages.user_id = $senderID AND messages.sent_id = $userID) 
OR (messages.user_id = $userID AND messages.sent_id = $senderID); 

Это непроверено, но суть в том, что вам нужно использовать ключевое слово "join".

+0

, выигравшей» t work –

+0

Я получаю ошибку sql от этого. –