Как вывести последний диалог как у vk или spaces. Таблица mail id - ИДЕНТИФИКА́ТОР user_id - получателя user_send_id - кто отправил text - сообщения У меня получилось сделать запрос если WHERE user_id = 1 - Где 1 это мой id пользователя.... Но проблема в том что как если я первый раз написал другому человеку При написание первого человека добавляю запрос Код (PHP): INSERT INTO mail(user_id, user_send_id, text)VALUES (2,1,'message'); При добавлении не показывает последний контакт с кем я начал. А если id 2 ответил мне и таким же способом Код (PHP): INSERT INTO mail(user_id, user_send_id, text)VALUES (1,2,'message'); То я получаю последнийконтакт. А надо чтобы я первый раз отправил ему то и показал его ник и мой последний сообщения... Каждый ник контакта и сообщения последный как у соц сети спасес и вк. Но у меня почему не получаеться сделать... Спасибо.... и доброе утро вам!
Был я говорю не о последжный сообщения а последный диалог сообщения с кем я человек начал связать не покахывают когда WHERE равен моего user_id то есть я отправил 1 человеку то в базе него сравнение моего так как только если я получу от другого человека и порявит контакт
Попробуй ещё раз объяснить что нужно, мне сложно тебя понять. Код (PHP): WHERE (user_id = '1' AND user_send_id = '2') OR (user_id = '2' AND user_send_id = '1')
denis01, нет мне нужен список контакты а не только с 1. То есть Чтобы получить список я делаю WHERE user = 1 где 1 это мой!!!! Но в баще лишь 1 поле который я отправил к 2 id пользователя то не показывает свой контакт который я начал... Я уже 2 тему создавал вы и так не ответили а тупо вот так вот так вот так и всегда мне не нужен такой что вы просите.... Я сказал мне нужено с кем я начал диалог контактов с виду _______________________________ id - 2 это ник будет выводить а так пример id message - тут выводит последжный сообщения с кем человеком я связал _______________________________ id - 3 это ник будет выводить а так пример id message - тут выводит последжный сообщения с кем человеком я связал _______________________________ И так далее зато сам себе контакт нельзя создать.... все что связано с пример вк На скрине видне всех с кем я начал... Но когда я с ней 1 раз написал то не показывает контакт в списке с кем..... При нажатии контакт появляет список сообщения который я беседую....
Недавно решал такую задачу. Для диалогов завёл отдельную табличку. Точнее, несколько dialog dialog_user_xref (хранит связь диалогов с пользователями, структура dialog_id, user_id, other_id, причём по две записи на каждый диалог, например если диалог 4 пользователей 3 и 5, то хранится в этой таблице как запись 4, 3, 5 так и запись 4, 5, 3, чтоб легко было найти) messages - ну тут соответственно сообщения, привязанные к dialog Такая структура БД позволяет легко оперировать именно с диалогами, в том числе получать при необходимости сообщения
Я же и так всё расписал, что есть. Код (PHP): CREATE TABLE `dialogs` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `last_msg_time` DATETIME NULL DEFAULT NULL, `last_msg_text` TEXT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE TABLE `dialog_user_xref` ( `dialog_id` INT(11) NULL DEFAULT NULL, `user_id` INT(11) NULL DEFAULT NULL, `other_id` INT(11) NULL DEFAULT NULL, UNIQUE INDEX `dialog_id_user_id_other_id` (`dialog_id`, `user_id`, `other_id`), INDEX `user_id` (`user_id`), INDEX `dialog_id` (`dialog_id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE TABLE `messages` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `dt` DATETIME NOT NULL DEFAULT '1930-01-01 00:00:00', `sender` INT(11) NOT NULL, `message` TEXT NOT NULL, `dialog_id` INT(11) NOT NULL, `attachment` VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; В этом проекте я просто последнее сообщение храню в таблице диалогов (для того, чтоб не давать лишние sql-запросы), но этого можно было и не делать. Код (PHP): select * from messages where dialog_id=4 order by dt desc limit 1;
mkramer, спасибо постараюсь его все соединить даже при написание отправить запрос в 3 местах хм ну и ладно сделаю как ни будь с работы вечером!
прочитал статью , об архитектуре базы данных на highload проектах. там советуют помимо общего списка сообщений пользователя , создавать поле для хранения последнего сообщения. так как выуживать последнее сообщение из общего списка сообщений может вызывать лишнюю нагрузку на highload. ну как я понял до highload тут далеко..
ну если что вот эта статейка. там еще бесплатный обучающий курс по highload проектам.(не спам) http://highload.guide/blog/what_data_we_have.html