2015-12-17 3 views
1

У меня есть пользователей и message_threads таблицы.Выберите и присоединитесь к таблицам в mysql

thread_message tables 

    Id | ToUserId | FromUserId 
---------------------------------- 
    1 | 1  |  2 
    2 | 2  |  3 


    users Table 

     Id | Name 
    ----------------- 
     1 | Ali  
     2 | Mahdi 
     3 | Hossein 

Ali хочет, чтобы получить все записи из thread_message, что его Id находится в одном из ToUserId или FromUserId и получить имя другого пользователя пары (В данном примере Mahdi). Али отправляет свой Id при запросе.

Что ВЫБРАТЬ & РЕГИСТРИРУЙТЕСЬ заявление по этой проблеме?

В этом примере результат должен быть

(Id ,ToUserId, FromUserId, Name) 

(1, 1, 2, Mahdi) 

ответ

0
(select t.*, u.Name from thread_message t left join users u on FromUserId=u.Id where ToUserId=1) 
union 
    (select t.*, u.Name from thread_message t left join users u on ToUserId=u.Id where FromUserId=1) 
0

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

SELECT T.Id, 
     T.ToUserId, 
     T.FromUserId, 
     (CASE WHEN T.ToUserId = tu.Id THEN fu.Name WHEN T.FromUserId = tu.Id THEN tu.Name ELSE '' END) Name 
FROM thread_message T 
LEFT OUTER JOIN users tu ON T.ToUserId = tu.Id 
LEFT OUTER JOIN users fu ON T.FromUserId = tu.Id 
WHERE 1 IN (T.ToUserId, T.FromUserId); 
+0

что фу и та? – Ali

+0

@Ali fu и tu - псевдонимы имен таблиц пользователей. fu соединен с thread_message с столбцом fromuserid, где, когда tu соединен с столбцом touserid –

+0

Ошибка синтаксиса или нарушение прав доступа: 1305 FUNCTION t.FromUserId не существует – Ali

0

Другой подход делает все сравнения в where (или on) пункта:

select tm.* 
from thread_message tm cross join 
    (select id 
     from users 
     where name = 'Ali' 
    ) x 
where x.id in (tm.ToUserId, tm.FromUserId); 

EDIT :

Если у вас есть идентификатор «Али», то ответ еще проще:

select tm.* 
from thread_message tm 
where $id in (tm.ToUserId, tm.FromUserId); 
+0

Он не отправляет имя Али для предложения where, отправляет Id of Ali – Ali

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