Всем привет, помогите составить запрос для вывода список собщений как в ВК Есть следующая таблица Код (Text): CREATE TABLE `messages` ( `id` int(11) NOT NULL, `user_id` int(11) DEFAULT NULL, `to_user_id` int(11) DEFAULT NULL, `message` text, `is_read` tinyint(1) NOT NULL DEFAULT '0', `created` datetime NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; id - идентификатор сообщения user_id - идентификатор пользователя, который отправил сообщение to_user_id - идентификатор пользователя, кому отправили сообщения сообщение message - сообщение is_read - прочитано сообщение получателем created - дата сообщения Нужно вывести все сообщения, которые пользователь отправил другим пользователям и сообщения, которые другие пользователи отправляли пользователю 1. Вывести список всех пользователей с которыми общался пользователь или пользователи которые писали пользователю 2. Отсортировать этот список по последним сообщения, пользователь который последннйи оправил сообщения в самом верху 3. Вывести последнее сообщение для каждого пользователя
список всех сообщений одного пользователя WHERE user_id=:x OR to_user_id=:x список сообщений между пользователями x и y. тут надо аккуратно обращаться с "И" и "ИЛИ". WHERE (user_id=:x AND to_user_id=:y) OR (user_id=:y AND to_user_id=:x) добавляешь ORDER BY и LIMIT и получаешь желаемое есть трюки с оптимизацией по скорости за счет добавления специальных "сортировочных" колонок, но ты сначала добейся просто чтобы работало..
список корреспондентов в обратном календарном порядке сообщений: здесь x - идентификатор текущего пользователя. Код (Text): SELECT DISTINCT IF(user_id=:x, to_user_id, user_id) AS another_user_id FROM messages WHERE user_id=:x OR to_user_id=:x ORDER BY created DESC дистинкт нужен чтобы сгруппировать одинаковые id. к сожалению сюда нельзя добавить другие колонки, это убъет условие уникальности. --- Добавлено --- если тебе интересно развить тему, потрудись вколотить в sqlfiddle.com пару десятков записей переписки между 3-5 пользователями. тогда я покажу трюки.