2013-07-24 2 views
-1

У меня есть две таблицы:Выберите одну запись на основе результатов нескольких строк

| conversations |  | conversation_participants | 
-------------------  ---------------------------------- 
| id | project_id |  | id | conversation_id | user_id | 
-------------------  ---------------------------------- 
    1 | 1     1 | 1    | 1 
    2 | 1     2 | 1    | 2 
          3 | 2    | 1 
          4 | 2    | 3 

Мне нужно, чтобы выбрать разговор идентификатор, что два пользователя имеют общие для конкретного проекта ID

Таким образом, в этом примере :

  • разговор идентификатор, который user_id 1 и user_id 2 имеют в общем для PROJECT_ID 1 является:
  • разговор идентификатор, который user_id 1 и user_id 3 имеют в общем для PROJECT_ID 1 является:

Мне нужен запрос, где я могу дать user_id а, user_id б и PROJECT_ID и получить разговор идентификатор взамен ,

Я пытался что-то вроде:

SELECT 
c.id 
FROM conversations c 
JOIN conversation_participants p ON p.conversation_id = c.id 
WHERE (p.user_id = ? AND c.project_id = ?) 
OR (p.user_id = ? AND c.project_id = ?) 

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

оцененная помощь! Благодаря!.

ответ

1

попробовать это

SELECT 
    c.id 
    FROM conversations c 
    JOIN conversation_participants p ON p.conversation_id = c.id 
    JOIN conversation_participants p2 ON p2.conversation_id = p.conversation_id 
    WHERE c.project_id = ? 
    AND p.user_id = ? and p2.user_id = ? 

вы можете дать:

p.user_id = 1 --as user1 
p2.user_id = 2 --as user2 
c.project_id = 1 

DEMO HERE

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