Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Добавил свойство функции $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));

}

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