Добавил свойство функции $multiple, для приёма запроса в виде массива запросов. Сделал запрос на сообщения от друзей и запрос на глобальные сообщения (Get the user feed) в MySQL. Всё работает. Но мне ещё нужно было исключить из ленты заблокированного пользователя. Изменил запрос (Get the user feed 2). Теперь заблокированного пользователя нет в ленте, но теперь мне не нравится как выглядит последний запрос. Может кто нибудь сможет его поправить или изменить?

public function unique_multidim_array($array, $key) {

$temp_array = array();

$i = 0;

$key_array = array();

foreach($array as $val) {

if (!in_array($val[$key], $key_array)) {

$key_array[$i] = $val[$key];

$temp_array[$i] = $val;

}

$i++;

}

return $temp_array;

}

function getMessages($query, $type, $typeVal, $multiple = false) {

// QUERY: Holds the query string

// TYPE: [loadFeed, loadProfile, loadHashtags]

// TYPEVAL: Values for the JS functions

global $LNG, $CONF;

// Run the query

$result_array = array();

if(!$multiple){

$result = $this->db->query($query);

}else{

foreach ($query as $q) {

$result_array[] = $this->db->query($q);

}

}

// Set the result into an array

$rows = array();

if(!$multiple){

while($row = $result->fetch_assoc()) {

$rows[] = $row;

}

}else{

foreach ($result_array as $key => $value) {

while($row = $value->fetch_assoc()) {

$rows[] = $row;

}

}

}

$rows = $this->unique_multidim_array($rows, 'id');

// Get the user feed

$multiple = false;

if(empty($this->pages)) {

$multiple = true;

$query = array();

//запрос на глобальные сообщения с друзьями

$query[] = sprintf("(SELECT *

FROM `messages` USE INDEX(`news_feed`)

LEFT JOIN `users` ON `users`.`idu` = `messages`.`uid` AND `users`.`suspended` = 0

WHERE (`messages`.`uid` IN (%s)

AND `messages`.`page` = 0

AND `messages`.`group` = 0

AND `messages`.`public` != 0 %s%s)

ORDER BY `messages`.`id` DESC LIMIT %s)

UNION (SELECT *

FROM messages, users

WHERE users.suspended = 0

AND messages.group = 0

AND messages.public = 1

AND messages.public

AND messages.uid = users.idu %s %s

ORDER BY messages.id

DESC LIMIT %s)

ORDER BY `id` DESC LIMIT %s", $this->friendsList, $start, $from, ($this->per_page + 1), $start, $from, ($this->per_page + 1), ($this->per_page + 1));

}

$result = $this->getMessages($query, 'loadFeed', '\''.saniscape($value).'\'', $multiple);

return $result;

}

// Get the user feed // исключает из ленты заблокированного пользователя

$multiple = false;

if(empty($this->pages)) {

$multiple = true;

$query = array();

//запрос на глобальные сообщения с друзьями

$query[] = sprintf("(SELECT *,

IFNULL((SELECT GROUP_CONCAT(uid) from blocked WHERE `blocked`.`by`= %s), 0) AS blist

FROM `messages` USE INDEX(`news_feed`)

LEFT JOIN `users` ON `users`.`idu` = `messages`.`uid` AND `users`.`suspended` = 0

WHERE (`messages`.`uid` IN (%s)

AND `messages`.`page` = 0

AND `messages`.`group` = 0

AND `messages`.`public` != 0 %s%s)

ORDER BY `messages`.`id` DESC LIMIT %s)

UNION (SELECT *,

IFNULL((SELECT GROUP_CONCAT(uid) from blocked WHERE `blocked`.`by`= %s), 0) AS blist

FROM messages, users

WHERE users.suspended = 0

AND messages.group = 0

AND messages.public = 1

AND messages.public

AND messages.uid = users.idu %s %s

HAVING users.idu not in(blist)

ORDER BY messages.id

DESC LIMIT %s)

ORDER BY `id` DESC LIMIT %s", $this->id, $this->friendsList, $start, $from, ($this->per_page + 1), $this->id, $start, $from, ($this->per_page + 1), ($this->per_page + 1));

}

4 года назад
roman707
Роман 
30 лет
4 года в сервисе
Был
4 года назад
1 отзыв(-1)

Заявки фрилансеров

Дмитрий
 
33 года
11 лет в сервисе
Был
2 месяца назад
47 отзывов
4 года назад
  • Похожие заказы

  • Необходимо разработать небольшой тестовый проект на Terraform для AWS. Проект должен включать создание и настройку облачной инфраструктуры. Ожидается качественная реализация и документация по развертыванию.

    Закрыт
    4 года назад
  • Необходимо разработать смарт-контракт на блокчейне Solana для запуска NFT коллекции. Контракт должен обеспечивать генерацию NFT-токенов из рандомного набора графических элементов по запросу пользователя с учетом подключения кошелька и функции mint по установленной цене.

    Закрыт
    4 года назад
  • Наша команда ищет Wordpress developer для добавления новых страниц на сайт, созданный на WordPress. Необходимы навыки верстки и программирования. Дизайны страниц предоставляются командой дизайнеров.

    Закрыт
    4 года назад
  • Требуется разработать скрипт на PHP для действующего сайта. Ищем специалиста с опытом в веб-программировании, который сможет реализовать задачу. Основное внимание уделяется функциональности и интеграции скрипта в существующий проект.

    Завершен
    4 года назад
  • Необходима доработка админки сайта на Laravel и Vue, а также организация дальнейшей поддержки проекта. Ожидается высокий уровень знаний в данных технологиях. Укажите стоимость часа работы. Техническое задание будет предоставлено после отклика.

    Закрыт
    4 года назад
  • Требуется разработка сайта консалтинговых услуг с использованием CMS Drupal. Необходимо сверстать простой адаптивный дизайн, основанный на макетах из Figma. Сайт включает главную страницу, услуги, контакты, новости, документацию и форум. Регистрация компаний и ограниченный доступ к некоторым страницам для зарегистрированных пользователей. Панель администратора для управления доступами.

    Закрыт
    4 года назад
  • Требуются правки для проекта на Laravel. Необходимо реализовать сортировку авто в таблице, изменить стили кнопок и фонов в зависимости от состояния авто. Сортировка должна учитывать отключенные авто, авто с истекающим сроком и остальные. Ожидается информация о стоимости и сроках выполнения.

    Закрыт
    4 года назад