Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52

Обмен сообщениями

22.07.2025, 12:04. Показов 2445. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, делаю обмен сообщениями.
База данных такая: `messages_messages`(`id`, `from_id`, `to_id`, `message`, `timestamp_created`, `is_deleted`)
Дело в том что я хочу сделать обмен сообщениями.
Код такой:
PHP
1
2
3
$get = DB::table('messages_messages')->where('from_id', session('user_id'))->orWhere('to_id', session('user_id'))
    ->limit(1)->get();
var_dump($get);
Но не получается.
Мне нужно получить крайне сообщения переписки между людьми аналог диалогов.
Как такое реализовать:
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2025, 12:04
Ответы с готовыми решениями:

Проблема с выводом полной версии сообщения(обмен сообщениями зарегистрированных пользователей)
Переписка на сайте с открытой сессией. Значит, есть таблица mes.php - список всех укороченных...

Проблема с выводом полной версии сообщения(обмен сообщениями зарегистрированных пользователей)
Переписка на сайте с открытой сессией. Значит, есть таблица mes.php - список всех укороченных...

обмен сообщениями на сайте пользователями
как реализовать обмен сообщениями на сайте пользователями? помогите и пожалуйста в подробностях...

21
Заблокирован
22.07.2025, 12:44
Цитата Сообщение от ИванЛопатин Посмотреть сообщение
Но не получается.
Что не получается? Может так?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (!session()->has('user_id')) {
    throw new \Exception('User ID not found in session');
}
 
$get = DB::table('messages_messages')
    ->where(function($query) {
        $query->where('from_id', session('user_id'))
              ->orWhere('to_id', session('user_id'));
    })
    ->orderBy('created_at', 'desc') // берем последнее по времени созданное сообщение
    ->limit(1)
    ->get();
 
var_dump($get);
1
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
26.07.2025, 14:35  [ТС]
Здравствуйте есть такой код и работает вроде. Но не получается выбрать все сообщения конкретно мою переписку с пользователем функции messages


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
namespace App\Http\Controllers;
use Session;
use DB;
use Crypto;
use Lang;
use Log;
class MessagesController extends Controller {
 
public function getMessages($room_id){
$get = DB::table('messages_messages')
    ->where(function($query) {
        $query->where('from_id', session('user_id'))
              ->orWhere('to_id', session('user_id'));
    });
    $get = json_decode(json_encode($get),true);
    $result=array();
    foreach($get as $v){
        $row1['data']=$v;
        $owner_info=DB::table('users')->where('id',session('user_id'))->get();
        $owner_info=json_decode(json_encode($owner_info),true);
        $row1['owner_info']=$owner_info;
        $row1['date_created']=parseTimestamp($v['timestamp_created']);
        $result[]=$row1;
    }
    return view('messages.get_messages', ['dialogs'=>$result]);
}
 
public function messages(){
$get = DB::table('messages_messages')->where('from_id', session('user_id'))
              ->orWhere('to_id', session('user_id'))->get();
    $get = json_decode(json_encode($get),true);
    $result = array();
    foreach($get as $v){
        $row1['data']=$v;
        $owner_info=DB::table('users')->where('id',session('user_id'))->get();
        $owner_info=json_decode(json_encode($owner_info),true);
        $row1['owner_info']=$owner_info;
        $row1['date_created']=parseTimestamp($v['timestamp_created']);
        $result[]=$row1;
    }
 
 
   return view('messages.messages', ['messages'=>$result]); 
}
 
}
0
0 / 0 / 0
Регистрация: 24.07.2025
Сообщений: 1
26.07.2025, 17:56
почему так нужно делать с кодировкой, мне просто интересно?

PHP
1
2
3
$get = json_decode(json_encode($get),true);
    $result=array();
    foreach($get as $v){
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
26.07.2025, 18:10
Цитата Сообщение от ИванЛопатин Посмотреть сообщение
Но не получается выбрать все сообщения конкретно мою переписку с пользователем
Я так понимаю нужно выбрать переписку между двумя пользователями, тогда и должны фигурировать два user_id.

PHP
1
2
3
4
5
6
7
DB::table('messages_messages')->where([
    ['from_id', '=', $userId1],
    ['to_id', '=',  $userId2],
])->orWhere([
    ['from_id', '=', $userId2],
    ['to_id', '=', $userId1],
]);
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
16.09.2025, 13:15  [ТС]
Здравствуйте мне нужно сделать обмен сообщениями, но не получается.
Есть такой код:
PHP
1
  $get = DB::table('im')->where('to_id',session('user_id'))->orWhere('from_id',$_GET['from_id'])->get();
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
16.09.2025, 13:28
Цитата Сообщение от ИванЛопатин Посмотреть сообщение
Есть такой код:
А что вы тут пытаетесь получить?
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
16.09.2025, 13:30  [ТС]
Сообщения)

Добавлено через 47 секунд
Структура такая:
SQL
1
`id`, `to_id`, `from_id`, `message`, `is_deleted`, `time_created`, `owner_ip`
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
16.09.2025, 13:41
ИванЛопатин, Если вам нужно вытащить сообщения между двумя пользователями (назовем user_id1 и user_id2), то вам необходимо найти пересечения по user_id1 AND user_id2.. но так как каждый из пользователей может находиться как в from_id так и to_id, то получается нужно расписать все случаи... и получиться так

SQL
1
2
3
4
SELECT * FROM im WHERE 
(from_id = :user_id1 AND to_id = :user_id2)
OR (from_id = :user_id2 AND to_id = :user_id1)
ORDER BY time_created DESC LIMIT 100
Либо как-то проектировать таблицы по другому, чтоб было удобнее делать различные запросы.. для этого нужно сформировать список требований..
К примеру если бы у нас была отдельная таблица с участниками.. то по ней проще было бы выбрать список "комнат" для текущего пользователя.
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
16.09.2025, 13:43  [ТС]
А не подскажите как реализовать и какая структура должна быть для "К примеру если бы у нас была отдельная таблица с участниками.. то по ней проще было бы выбрать список "комнат" для текущего пользователя"
0
Эксперт PHP
 Аватар для liris
4405 / 1045 / 154
Регистрация: 16.01.2023
Сообщений: 2,587
16.09.2025, 13:44
Цитата Сообщение от ИванЛопатин Посмотреть сообщение
но не получается
Как же вам помочь, если у вас уже четвертая тема с одним и тем же вопросом, и вы даже на уточняющие вопросы не отвечаете?
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
16.09.2025, 13:45  [ТС]
И как ваш код sql преобразовать в laravel eloquent то есть выборку через DB::table('im')

Добавлено через 25 секунд
А что не так так и не пойму не получается
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
16.09.2025, 14:30
Цитата Сообщение от ИванЛопатин Посмотреть сообщение
А не подскажите как реализовать и какая структура должна быть для
У меня нет опыта разработки такой системы, ну предварительно я бы сделал так.. Вместо "комнаты" все-таки бы ввел сущность - чат.

msg__chat
---------
id
title
type (private/group)
last_message_id
last_message_at

msg__chat_to_user
---------
user_id
chat_id

msg__message
--------
id
chat_id
user_id (автор сообщения)
text
created_at

При добавлении сообщения нужно обновлять поля
last_message_id
last_message_at

Это деморализация для сортировки чатов.. потому как джоинить для этого таблицу со всеми сообщениями будет не очень оптимальным решением.

Добавлено через 12 минут
ну а last_message_id чтоб допустим достать по одному последнему сообщению с каждой комнаты.. Опять же чтоб не делать join-ы (либо группировок по всей таблице сообщений), я бы делал отдельным запросом, предварительно собрав id-шники сообщений.
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
16.09.2025, 14:33  [ТС]
Мне подсказали как выводить сообщения между пользователями, но как сделать на подобие вк диалоги то есть страница со всеми сообщениями по оному на каждого пользователя?
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
16.09.2025, 15:57
Цитата Сообщение от ИванЛопатин Посмотреть сообщение
Мне подсказали как выводить сообщения между пользователями, но как сделать на подобие вк диалоги то есть страница со всеми сообщениями по оному на каждого пользователя?
Таблица с сообщениями может иметь миллионы записей, и чтоб эффективно с ней работать - нужно будет использовать индексы. Индексы хранят записи в заранее отсортированном виде, что позволяет не перебирать все записи, а применять некие внутренние алгоритмы для эффективной выборки.
Чаще всего мы будем брать сообщения для конкретного диалога (либо напрямую по id сообщения). Для этого нам выгоднее, чтоб было отдельное поле id некого диалога.

Выводить список диалогов через сложные запросы из миллиона сообщений - не лучшее решение.. Лучше ввести отдельную таблицу для этого.
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
17.09.2025, 11:24  [ТС]
Спасибо а как такую систему реализовать
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
17.09.2025, 11:33  [ТС]
Правильно я сделал??
Миниатюры
Обмен сообщениями  
0
Заблокирован
17.09.2025, 11:50
ИванЛопатин, нажимаешь в phpmyadmin на вкладку "Структура таблицы". Находишь нужное поле, где надо проставить индекс и справа будет кнопка "Еще". Нажимаешь и выбираешь "Индекс". Если необходимо уникальное поле - тогда выберешь "Уникальный"
0
0 / 0 / 0
Регистрация: 25.05.2025
Сообщений: 52
17.09.2025, 12:24  [ТС]
А как сделать систему диалогов
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
17.09.2025, 12:30
Цитата Сообщение от ИванЛопатин Посмотреть сообщение
Правильно я сделал??
А что вы сделали по id и так должен быть индекс PRIMARY по умолчанию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.09.2025, 12:30
Помогаю со студенческими работами здесь

Обмен личными сообщениями
кто может подкинуть код обмена личными сообщениями между пользователями

как написать Обмен сообщениями как в контакте?
Доброго времени суток уважаемые знатоки) у меня такая задача - хочу на сайте реализовать обмен...

Обмен сообщениями
Как отправить сообщение через свой сайт в браузер тому кто на сайте (без запроса)? И вообще...

Обмен сообщениями
Уважаемые участники форума! Я не новичок в ООП, но малоопытный в РНР. Пытаюсь понять технологию...

Обмен сообщениями (новичек)
Вопрос такой: как грамотно организовать обмен сообщениями между пользователями, типо того что в вк...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru