Я бы очень признателен за любую помощь, пытающуюся упростить MySQL-запрос. Цель запроса - получить сообщения из таблицы сообщений (users_messages), которая имеет следующие столбцы: message_id, from_id, to_id, message_content, date_sent.Попытка упростить MySQL-запрос
Кому необходимо, чтобы from_id и to_id присоединились к таблице пользователей (пользователей), которая имеет следующие столбцы: user_id, user_username.
Также следует упомянуть, что есть заблокированная таблица пользователей (users_blocked), которая отфильтровывает любые сообщения, если функция user_id в этой таблице.
Все это прекрасно работает, и сообщения упорядочиваются с помощью новейшей первой, которая является тем, что я хочу. Моя единственная проблема заключается в том, что она не тянет соответствующее сообщение message_content. т. е. вытягивает самую последнюю дату, но не последнее сообщение.
Возможно, мне нужен другой подход (например, подзапросы), но я не могу обойти его.
Вот запрос:
select m.message_content,
if(from_id < to_id, concat(from_id,to_id), concat(to_id,from_id)) as ft,
if (from_id = $my_id, to_id, from_id) as other_id,
max(date_sent) as most_recent
from users_messages m
left join users_blocked ub1 on (from_id = ub1.blocked_id and ub1.user_id = $my_id)
left join users_blocked ub2 on (to_id = ub2.blocked_id and ub2.user_id = $my_id)
where
(from_id = $my_id or to_id = $my_id)
and ub1.blocked_id is null
and ub2.blocked_id is null
group by
ft
order by
most_recent desc
К сожалению, здесь структуры таблиц:
пользователи
user_id user_username 1 Simon 2 Amber 3 Tom
users_messages
message_id from_id to_id date_sent message_content 1 1 2 2012-07-04 11:52:12 Hello 2 1 2 2012-07-04 12:32:24 Another message 3 1 2 2012-07-04 14:00:00 Hello again
users_blocked
user_id blocked_id 1 3
Пожалуйста, включите вашу структуру (ы) таблицы. Также - он возвращает 'message_content', но это не правильное значение? Или это ничего не возвращает? – ethrbunny
Это не так уж плохо. Черт, вы можете прочитать все это без прокрутки, что всегда является бонусом! –
не страшно, но я бы, вероятно, просто получил массив заблокированных пользователей и сделал не для for_id – timpone