Показаны сообщения «Подписчик» и собственные сообщения пользователя - PullRequest
1 голос
/ 21 декабря 2011

Это поставило меня в тупик на некоторое время.

Моя проблема: У меня есть 2 разные таблицы. Таблица для сообщений пользователей и таблица для подписчиков.

Таблица подписчиков выглядит так:

SubscriberID -> ProfileID
1 -> 2
1 -> 3
2 -> 3
2 -> 4
3 -> 2

Таблица моих сообщений выглядит следующим образом:

PostID -> AuthorID -> PostDate -> PostBody
1 -> 2 -> 20.12.12 -> Hello Word
2 -> 3 -> 21.12.12 -> Bye Bye World
3 -> 1 -> 22.12.12 -> Ой, подождите
4 -> 4 -> 23.12.12 -> Кто-нибудь еще здесь?

В основном, это работает так, что пользователь с идентификатором подписывается на пользователя с идентификаторами 2 и 3. Идентификатор # 2 подписывается на идентификаторы № 3 и № 4. Если пользователь подписан на определенного пользователя, он может видеть только сообщения от человека, на которого он подписан. Теперь я использую следующее, что видел в похожем вопросе:

SELECT POSTS.*
FROM POSTS
JOIN SUBSCRIBERS
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID
WHERE SUBSCRIBERS.SUBSCRIBERID = ?
ORDER BY POSTS.POSTID DESC LIMIT 10

Это отлично работает, но не отображает сообщение пользователя. Я пытался изменить его, но он не работает: \

Если вам интересно, "?" представляет идентификатор пользователя

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

1 Ответ

2 голосов
/ 21 декабря 2011

Вы можете сделать это, изменив свой запрос на:

SELECT POSTS.*
FROM POSTS
LEFT JOIN SUBSCRIBERS
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID
WHERE SUBSCRIBERS.SUBSCRIBERID = ? OR POSTS.AUTHORID = ?
GROUP BY POSTS.POSTID ORDER BY POSTS.POSTID DESC LIMIT 10 

Он также выбирает собственные сообщения пользователя.Надеюсь, что это поможет.

Обновлено: добавлено GROUP BY POSTS.POSTID, поэтому дубликаты удаляются, так как вы ищете только данные в таблице POSTS.

Когда вы запускаете запрос, например, передавая значения - например.для пользователя с идентификатором 1 запрос выглядит следующим образом:

SELECT POSTS.*
FROM POSTS
LEFT JOIN SUBSCRIBERS
ON POSTS.AUTHORID = SUBSCRIBERS.PROFILEID
WHERE SUBSCRIBERS.SUBSCRIBERID = 1 OR POSTS.AUTHORID = 1 GROUP BY POSTS.POSTID
ORDER BY POSTS.POSTID DESC LIMIT 10

Результаты:

PostID  AuthorID    PostDate    PostBody

3       1   2012-12-21  Oh Wait
2       3   2012-12-21  Bye Bye World
1       2   2012-12-20  Hello Word

Это то, что вы получаете, когда значения правильно передаются в запрос select.Значения, передаваемые в SUBSCRIBERID и AUTHORID , должны быть одинаковыми.LEFT JOIN решит вашу проблему.

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