За последние 24 часа нас посетили 26819 программистов и 1483 робота. Сейчас ищут 980 программистов ...

Как вывести последний сообщения диалога!

Тема в разделе "PHP для новичков", создана пользователем engine.energy, 24 окт 2015.

  1. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    Как вывести последний диалог как у vk или spaces.

    Таблица mail
    id - ИДЕНТИФИКА́ТОР
    user_id - получателя
    user_send_id - кто отправил
    text - сообщения

    У меня получилось сделать запрос если WHERE user_id = 1 - Где 1 это мой id пользователя....

    Но проблема в том что как если я первый раз написал другому человеку
    При написание первого человека добавляю запрос
    Код (PHP):
    1. INSERT INTO mail(user_id, user_send_id, text)VALUES (2,1,'message');
    2.  
    При добавлении не показывает последний контакт с кем я начал. А если id 2 ответил мне и таким же способом
    Код (PHP):
    1. INSERT INTO mail(user_id, user_send_id, text)VALUES (1,2,'message');
    2.  
    То я получаю последнийконтакт. А надо чтобы я первый раз отправил ему то и показал его ник и мой последний сообщения...

    Каждый ник контакта и сообщения последный как у соц сети спасес и вк. Но у меня почему не получаеться сделать... Спасибо.... и доброе утро вам!
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Доброе утро, отсортируй id от меньшего к большему
     
  3. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    Был я говорю не о последжный сообщения а последный диалог сообщения с кем я человек начал связать не покахывают когда WHERE равен моего user_id то есть я отправил 1 человеку то в базе него сравнение моего так как только если я получу от другого человека и порявит контакт
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Попробуй ещё раз объяснить что нужно, мне сложно тебя понять.
    Код (PHP):
    1. WHERE (user_id = '1' AND user_send_id = '2') OR (user_id = '2' AND user_send_id = '1')
     
  5. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    denis01, нет мне нужен список контакты а не только с 1.

    То есть
    Чтобы получить список я делаю WHERE user = 1 где 1 это мой!!!! Но в баще лишь 1 поле который я отправил к 2 id пользователя то не показывает свой контакт который я начал... Я уже 2 тему создавал вы и так не ответили а тупо вот так вот так вот так и всегда мне не нужен такой что вы просите....

    Я сказал мне нужено с кем я начал диалог контактов с виду
    _______________________________
    id - 2 это ник будет выводить а так пример id
    message - тут выводит последжный сообщения с кем человеком я связал
    _______________________________
    id - 3 это ник будет выводить а так пример id
    message - тут выводит последжный сообщения с кем человеком я связал
    _______________________________
    И так далее зато сам себе контакт нельзя создать.... все что связано с пример вк
    [​IMG]
    На скрине видне всех с кем я начал...

    Но когда я с ней 1 раз написал то не показывает контакт в списке с кем.....
    При нажатии контакт появляет список сообщения который я беседую....
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Я не знаю как в vk и тебя понять не могу, подождём, может кто-то другой поймёт
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Недавно решал такую задачу. Для диалогов завёл отдельную табличку. Точнее, несколько
    dialog
    dialog_user_xref (хранит связь диалогов с пользователями, структура dialog_id, user_id, other_id, причём по две записи на каждый диалог, например если диалог 4 пользователей 3 и 5, то хранится в этой таблице как запись 4, 3, 5 так и запись 4, 5, 3, чтоб легко было найти)
    messages - ну тут соответственно сообщения, привязанные к dialog

    Такая структура БД позволяет легко оперировать именно с диалогами, в том числе получать при необходимости сообщения
     
  8. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    mkramer, не скинеш sql и код запроса! Спасибо заранее..
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Я же и так всё расписал, что есть.
    Код (PHP):
    1. CREATE TABLE `dialogs` (
    2.     `id` INT(11) NOT NULL AUTO_INCREMENT,
    3.     `last_msg_time` DATETIME NULL DEFAULT NULL,
    4.     `last_msg_text` TEXT NULL,
    5.     PRIMARY KEY (`id`)
    6. )
    7. COLLATE='utf8_general_ci'
    8. ENGINE=InnoDB;
    9. CREATE TABLE `dialog_user_xref` (
    10.     `dialog_id` INT(11) NULL DEFAULT NULL,
    11.     `user_id` INT(11) NULL DEFAULT NULL,
    12.     `other_id` INT(11) NULL DEFAULT NULL,
    13.     UNIQUE INDEX `dialog_id_user_id_other_id` (`dialog_id`, `user_id`, `other_id`),
    14.     INDEX `user_id` (`user_id`),
    15.     INDEX `dialog_id` (`dialog_id`)
    16. )
    17. COLLATE='utf8_general_ci' ENGINE=InnoDB;
    18. CREATE TABLE `messages` (
    19.     `id` INT(11) NOT NULL AUTO_INCREMENT,
    20.     `dt` DATETIME NOT NULL DEFAULT '1930-01-01 00:00:00',
    21.     `sender` INT(11) NOT NULL,
    22.     `message` TEXT NOT NULL,
    23.     `dialog_id` INT(11) NOT NULL,
    24.     `attachment` VARCHAR(255) NULL DEFAULT NULL,
    25.     PRIMARY KEY (`id`)
    26. )
    27. COLLATE='utf8_general_ci'
    28. ENGINE=InnoDB;
    29.  
    В этом проекте я просто последнее сообщение храню в таблице диалогов (для того, чтоб не давать лишние sql-запросы), но этого можно было и не делать.
    Код (PHP):
    1. select * from messages where dialog_id=4 order by dt desc limit 1;
    2.  
     
  10. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    mkramer, спасибо постараюсь его все соединить даже при написание отправить запрос в 3 местах хм ну и ладно сделаю как ни будь с работы вечером!
     
  11. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    прочитал статью , об архитектуре базы данных на highload проектах.
    там советуют помимо общего списка сообщений пользователя , создавать поле для хранения последнего сообщения.
    так как выуживать последнее сообщение из общего списка сообщений может вызывать лишнюю нагрузку на highload.

    ну как я понял до highload тут далеко..
     
  12. engine.energy

    engine.energy Новичок

    С нами с:
    31 май 2015
    Сообщения:
    149
    Симпатии:
    0
    zahermaher, и оптимизация также важно =)
     
  13. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14