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

У меня есть стол

  1. ответы (aid, user_id, …) — таблица сообщений

  2. пользователи (ИД пользователя, имя, …)

  3. последователи (user_one, user_two) — где user_one — подписчик, а user_two — подписчик.

Мне нужно показывать посты людей, на которых я подписан, и мои посты, использующие php и mysql, в моем домашнем фиде. Но в настоящее время он работает не так, как ожидалось.Каждое сообщение показывает 7 раз.

текущий выбор

<?php

$my_id = $_SESSION['user_id'];
$sql_query = "SELECT * FROM answers left join users on users.userid = answers.user_id LEFT join followers on followers.user_one = answers.user_id WHERE answers.user_id= '$my_id' ORDER BY answers.date_created DESC";
?>

0

Решение

Не видел, вы также хотите вернуть свои сообщения. Попробуйте ниже sql:

     select * from answers, users, (select user_one user_id from followers where user_two='$my_id' union select '$my_id' user_id) a where answers.user_id=users.user_id and answers.user_id=a.user_id;

В вашем sql есть ошибка: SELECT * FROM ответы оставляют присоединиться к пользователям на users.userid = answers.user_id ВЛЕВО присоединяются к подписчикам на последователей.

второе левое объединение должно быть follow.user_two = ansers.user_id, а оператор where должен быть follow.user_one = ‘$ my_id’;

1

Другие решения

Один из вариантов здесь — сформулировать ваш запрос как объединение двух запросов. В первой половине списка ниже представлены все сообщения, подписанные вами. Вторая половина союза находит все ваши посты.

SELECT a.*
FROM answers a
INNER JOIN followers f
ON (a.user_id = f.user_two AND f.user_one = $my_id)
UNION ALL
SELECT a.* FROM answers WHERE user_id = $my_id;

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector