2016-03-09 4 views
0

У меня есть две столбы и доля, почта имеет много общего. Я хочу получить все данные в таблице post, используя userId (отправлено пользователем-владельцем), а также проверить общую таблицу общего доступа, используя тот же идентификатор пользователя, который является, если какая-то одна общая почта другому пользователю, если какое-либо условие истинно, мне нужно получить данные.Запрос на извлечение информации из одной таблицы на основе других

Я хочу получить данные в таблице сообщений, если отправлено владельцем или передано другим пользователем в общей таблице.

Пример:

имя таблицы: запись

id(pk) postname userid 
    1 abc  10 
    2 xxx  10 
    3 yyy  11 
    4 zzz  12 
    5 bbb  13 

имя таблицы: Доля

id postid(fk) userid 
1 3   10 
2 4   10 
3 3   11 
4 1   12 

Ожидаемые результаты: Пример поиска по идентификатору пользователя 10

id postname userid 
    1 abc  10 // this record created by user 10 (owner) 
    2 xxx  10 // this record created by user 10 (owner) 
    3 yyy  11 // this record shared by other user to user 10. 
    4 zzz  12 // this record shared by other user to user 10. 
+0

Предлагаю сделать два отдельных запроса и СОЕДИНЯТЬ их. –

+0

@ PM77-1 любой другой альтернативный способ для публикации и обмена? –

+0

Я пытаюсь сделать головы или хвосты вашего вопроса. У вас есть стол «post», который является списком всех сообщений, с пользователем, который его создал. Затем у вас есть «share», который представляет собой список сообщений, которые «разделяются» другим пользователям. Я полагаю, что postid в таблице share эквивалентен первичному ключу post (id)? Теперь .. ваш результат указывает на что? Я не могу понять этого. половина результатов, похоже, указывает, что это имя сообщения вместе с исходным пользователем, который его создал, а затем другая половина, похоже, показывает, что пользователи получили сообщение «совместно» с ними. –

ответ

1

Возможно, вы захотите напечатать created_by и shared_by в двух разных столбцах, так как пример кажется немного запутанным. Ниже запрос должен быть получен ожидаемый результат в этом случае:

select p.id, p.postname, p.userid as 'created_by', s.user_id as 'shared_by' 
from post p left outer join share s on p.id = s.postid 
where p.userid = 10 
order by p.id; 
+0

Я использую mysql, и я пробовал свой код, но я получаю все записи. Я хочу получить все сообщения, созданные владельцем (например: user id = 10) и переданные другим пользователем пользователю ID 10. –

+0

Я отредактировал свой ответ. Вы можете проверить сейчас? –

0

Это, наконец, нажал то, что вы ищете ..

select p.id, p.postname, p.userid 
from post p 
join share s on s.postid=p.id 
where s.userid='10' or p.userid='10' 

Это должно вернуть все взаимодействия, связанные с конкретным пользователем (ID 10), либо если пост был создан этим пользователем, либо сообщение было передано этому пользователю.

+0

Спасибо за ваш ответ. Я попробовал userid 11, он возвращает повторяющиеся записи. –

+0

Да, это было бы, так как есть две разные строки с идентификатором пользователя 11. Возможно, добавьте 'и s.userid <> p.userid'. Это предотвратит добавление строк, в которых сообщение было передано его собственному создателю. –

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