Я работаю над небольшим сайтом, где люди могут следовать друг за другом. На сайте есть новостная лента, где пользователи могут видеть обновления других пользователей, за которыми они следят. Проблема в том, что я вижу только сообщения других пользователей, а не мои. Я хочу, чтобы текущий пользователь мог видеть свои сообщения слишком упорядоченными в сообщениях других пользователей. Что-то вроде стены Facebook.
Я пробовал множество разных запросов и php, но я получаю сообщения только от других пользователей, или когда мне удается вытащить свои сообщения, для каждого пользователя, следующего за мной, публикуются повторяющиеся сообщения.
У меня есть 3 таблицы «участники», «пост» и «следовать». Таблица членов содержит идентификатор пользователя, имя и фамилию. Стол постов содержит идентификатор пользователя (FromID в таблице), проиндексированный для членов UserID и поста от пользователя. В следующей таблице есть 3 столбца FollowID, Followed и Follower, и Followed, и Follower являются индексами для членов UserID.
На данный момент я использую этот запрос:
$query= "SELECT Post.*, members.*, follow.* FROM Post
INNER JOIN members ON Post.FromID=members.UserID
LEFT JOIN follow ON members.UserID=follow.Followed
WHERE Post.FromID='$user' OR follow.FollowerID='$user'
ORDER BY Post.date DESC, Post.time DESC";
$ user — это UserID текущего вошедшего в систему пользователя.
Этот запрос возвращает все сообщения, которые я хочу, но проблема в том, что мои сообщения показываются / n раз для каждого пользователя, который следует за мной.
Я действительно был бы признателен за доброту к тому, кто дал мне несколько указаний, что я делаю неправильно. Спасибо
Проблема в вашем $ user. В настоящее время происходит то, что у вас есть условие ИЛИ в предложении where. И вы пытаетесь получить либо ваши данные, либо данные ваших подписчиков.
Мое решение для вас будет удалить $ user из вашего запроса. Таким образом, у вас будет только список данных подписчиков. Сделайте другой запрос для ваших сообщений, а затем при отображении сортируйте их по дате и времени, чтобы у вас были сообщения с другими подписчиками.
Чтобы ваши посты и посты в одном запросе.
Используйте союз. Подобно :
(Запрос ваших сообщений ЗАКАЗАТЬ ПО ДАТЕ)
UNION
(Запрос подписчиков постов ORDER BY по дате);
Также проверьте использование UNION в w3schools.
Надеюсь это поможет
Я думаю, что этот запрос может быть легче понять:
$query = "SELECT * FROM Post,members,follow
WHERE
Post.FromID=members.UserID
AND
members.UserID=follow.FollowedAND ( Post.FromID='$user' OR follow.FollowerID='$user')
ORDER BY Post.date DESC, Post.time DESC";