Сложный запрос MySQL для связанных пользователей и сообщений

Мне нужно создать запрос MySQL, чтобы уведомлять пользователей пакета программного обеспечения, когда к сообщению добавляется комментарий. Таблицы, которые у меня есть для этого,

Сообщения: pid, uid

Комментарии: cid, uid, pid

Пользователи: uid

Связанные: rid, uid1, uid2

Устройства: сделал, uid

У поста может быть много комментариев, много комментариев может быть опубликовано для каждого пользователя, и у пользователя может быть много устройств.

Когда комментарий вставлен, мне нужно получить список уникальных устройств для всех, кто внес свой вклад в комментарии на данный момент, включая автора, но только там, где они связаны с пользователем, который прокомментировал.

в

переработано.uid1

содержит идентификатор пользователя и

связанный .uid2

содержит связанный с ним идентификатор пользователя, например.

-----------------------------------
| rid       |  uid1      |  uid2  |
-----------------------------------
| 1         |  34        |  43    |
-----------------------------------
| 2         |  43        |  34    |
-----------------------------------

У меня есть следующие данные

PostAuthorId | Идентификатор сообщения | Идентификатор пользователя

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

Как я уже сказал, мне нужно возвращать только уникальные устройства, любая помощь будет потрясающей, спасибо

ИЗМЕНИТЬ SQLFIDDLE **

http://sqlfiddle.com/#!2/4217f



person Justin Erswell    schedule 09.08.2012    source источник
comment
Не могли бы вы добавить все соответствующие столбцы таблицы MySQL?   -  person eabraham    schedule 09.08.2012
comment
Сообщения: pid, uid › Комментарии: cid, uid, pid › Пользователи: uid › Связанные: rid , uid1, uid2 › Устройства: did, uid devices.did — это то, что я хочу вернуть   -  person Justin Erswell    schedule 09.08.2012
comment
для всех, кто внес свой вклад в комментарии — как узнать, какие пользователи внесли свой вклад в комментарий? Это в отдельной таблице?   -  person Nivas    schedule 09.08.2012
comment
@JustinErswell, было бы лучше, если бы ты показал нам структуру своих таблиц. Для этого можно использовать sqlfiddle.com.   -  person Nathan    schedule 09.08.2012
comment
Можете ли вы объяснить, как это работает? Какой из двух идентификаторов пользователя будет отображаться обратно на идентификатор пользователя в сообщениях или на идентификатор на устройствах?   -  person Gordon Linoff    schedule 09.08.2012
comment
sqlfiddle.com/#!2/4217f   -  person Justin Erswell    schedule 09.08.2012
comment
Связанные работы, поскольку они создали отношения между двумя пользователями, каждый пользователь будет иметь запись для своих связанных пользователей.   -  person Justin Erswell    schedule 09.08.2012


Ответы (1)


Все, что вам нужно, это одно правильное (многократное) JOIN

SELECT ...
FROM Posts P
INNER JOIN Users O ON P.uid = O.uid  -- Post owner
INNER JOIN Devices OD ON O.uid = OD.uid  -- Devices of post owner
INNER JOIN Related R ON O.uid = R.uid1  -- Post owner to other user relationship
INNER JOIN Comments C ON R.uid2 = C.uid AND P.pid = C.pid  -- Comments by related user
INNER JOIN Devices CD ON C.uid = CD.uid  -- Devices of users posting comments
WHERE pid = yourPostID

это должно сделать это.
Не забывайте, что у вас есть таблица Devices дважды, поэтому вам нужно обращаться к ним через устройства OD (владельца) и CD (автора комментария).

person Germann Arlington    schedule 09.08.2012
comment
Это выглядит хорошо, однако не возвращает исходное устройство авторов постов @germann-arlington. - person Justin Erswell; 09.08.2012
comment
@Justin Erswell Добавьте еще одно ПРИСОЕДИНЯЙТЕСЬ к INNER JOIN Devices D1 ON P.uid = D1.uid - person Germann Arlington; 09.08.2012
comment
к сожалению, я получаю тот же результат, я что-то упустил? не могли бы вы обновить свой ответ, очень ценю ваше время - person Justin Erswell; 09.08.2012
comment
@JustinErswell Попробуйте мой обновленный SQL (в посте) и убедитесь, что вы ссылаетесь на правильные псевдонимы таблиц. - person Germann Arlington; 10.08.2012