spesher
@spesher
Objective-C, iOS app Developer

Лента новостей на php (проблема с запросом), как реализовать 2 запроса в один?

Нужна помощь правильно "отфильтровать" вывод данных для ленты новостей. То есть, я выбираю из базы данных те поля где мой id подписан на других пользователей с их id. Проблема в том ЧТО мне даёт только id ПОСЛЕДНЕГО ЮЗЕРА на которого я подписался, а не выдаёт всех (то есть не все поля, а только одно), в цикле ниже просто идёт фильтрация по сообщениях.

// Выбор id залогиненного пользователя (по id буду сортироваться сообщения в ленты новостей от пользоватей на которых он подписан )
$sqlForSubscriberByLogged	   = "SELECT id_request_reciver FROM subscribers WHERE id_request_sender IN('$loggedUser->id') ";
$queryForSubscriberByLogged 	  = $database->query($sqlForSubscriberByLogged);
$fetch_arrayForSubscriberByLogged = $database->fetch_array($queryForSubscriberByLogged);								
								
// Здесь сортировка для ленты новостей от нужных пользователей на которых подписан залогившейся юзер.
// Фильтрация данных будет идти от id_request_reciver
$sqlForWallMessagesBySubscribers   = "SELECT id_mes,id,text,sender,minute,hour,day,month,year FROM wall_messages WHERE
id IN($fetch_arrayForSubscriberByLogged[id_request_reciver]) ORDER BY id_mes DESC LIMIT 15"; //IN()
$queryForWallMessagesBySubscribers = $database->query($sqlForWallMessagesBySubscribers);


Должно получиться вот так
f31c4eac26c147c08558bc6cbbaf51cb.png

А мне выводит контент только одного пользователя на которого я подписан, а я подписан на 2 юзера...
60a6ffc4a7314b5497ea68a8968374cd.png

Задавал этот вопрос здесь, Перейти
Но решения не нашел.
  • Вопрос задан
  • 694 просмотра
Решения вопроса 1
spesher
@spesher Автор вопроса
Objective-C, iOS app Developer
Задачу решил!
Всем спасибо за подсказки та помощь.

Вот что изменил я..
SELECT subscribers.id_request_reciver, wall_messages.* FROM subscribers JOIN wall_messages ON subscribers.id_request_reciver = wall_messages.id WHERE subscribers.id_request_sender = $loggedUser->id ORDER BY wall_messages.id_mes DESC


Результат.
bea195ae7b994c188a67dbbaffdff3ca.png

Хотел еще спросить, что дописать в запросе чтобы видеть и свои записи в ленте ?
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
Самое первое, что надо сказать:
Не нужно давать временным переменным супер-информативные имена.
  • $sqlForSubscriberByLogged - это просто $sql. Эта переменная никогда никому не будет нужна, кроме функции, исполняющей запросы. А ей всё равно, как названа переменная.
  • Переменной $queryForSubscriberByLogged в принципе быть не должно, это паразитная, ничего не делающая переменная.
  • $fetch_arrayForSubscriberByLogged - это какой-то адов монстр. Нас не должно интересовать, каким способом получена информация, через fetch_array или fetch_row. Нас должно только интересовать её содержимое. Вот его и надо описать в имени переменной. Но тоже без эксцессов.


В итоге должно получиться
$sql = "SELECT id_request_reciver FROM subscribers WHERE id_request_sender = ..."; 
$SubscriberByLogged = $database->query($sql)->fetch_array();
Ответ написан
Комментировать
@iznaur
Если я Вас правильно понял,прочитайте про объединение запросов,Вам нужно,что-то вроде такого:
$database->query("SELECT (поля которые вам нужны из этих таблиц в виде таблица.поле) FROM subscribers LEFT JOIN wall_messages ON subscribers.id_request_reciver=wall_messages.id WHERE subscribers.id_request_sender = $loggedUser->id")->fetch_array();
Ответ написан
Комментировать
Посмотри вардампом, что у тебя в переменной $sqlForWallMessagesBySubscribers и ошибка наверняка найдется.
Ответ написан
пипец переменные...
вместо $fetch_arrayForSubscriberByLogged[id_request_reciver] нужно implode(',', $fetch_arrayForSubscriberByLogged)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы