|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|
Диалоги между пользователями07.02.2014, 12:33. Показов 13535. Ответов 58
Добрый день. Помогите пожалуйста решить логическую задачу. У себя пытаюсь реализовать что-то наподобие диалогов между пользователями. Примерно как вконтакте. Итак, сделал две таблицы. Одну для диалогов, другую для сообщений. Таблица для сообщений, представлена на рисунке. Вопрос. Как построить таблицу для диалогов? Какие поля там должны быть?
0
|
|
| 07.02.2014, 12:33 | |
|
Ответы с готовыми решениями:
58
Перевод между пользователями
Передача данных между БД с разными пользователями |
|
71 / 71 / 13
Регистрация: 01.09.2011
Сообщений: 379
|
||||||||||||||||||||||
| 09.02.2014, 21:43 | ||||||||||||||||||||||
Сообщение было отмечено stashappy как решение
Решениеdialogs: id user1_id user2_id deleted messages: id dialog_from_id dialog_to_id Тогда при новом сообщении от user_id = 1 to user_id = 2 Вы создаете две записи в dialogs
и вставляется запись в messages
найти диалог, где user1_id =1 and user2_id = 2 (это dialog_id = 1), затем выбираем из messages все записи с dialog_from_id или dialog_to_id = 1 (dialog_id), по тому какое поле совпало dialog_from_id или dialog_to_id мы понимаем исходящее это сообщение или входящее. Мы нашли message id = 1 dialog_from_id = 1 dialog_to_id = 2, по полю dialog_from_id - т.е. для user_id = 1 это исходящее сообщение. Для пользователя user_id = 2 это сообщения найдется по полю dialog_to_id => оно для него входящее. Далее если кто-то из них удалит переписку, н-р user_id = 1, то находится его диалог с user_id = 2, это dialog_id = 1 и ставится deleted = 1, тогда для user_id = 1, для показа сообщений с user_id = 2, мы не найдем диалог => сообщения не выводятся(для user_id = 2 найдется диалог 2 и по нему сообщения найдутся). Если user_id = 1 возобновит переписку или user_id = 2 снова напишет user_id = 1, то создается новый диалог для user_id = 1, для user_id = 2 найдется старый(не удаленный):
будут записываться с другим номером диалога для user_id = 1, и старым для user = 2:
2
|
||||||||||||||||||||||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||||||
| 09.02.2014, 22:30 | |||||||||||||
Конечно, при таком сравнении все будет шустро донельзя.
0
|
|||||||||||||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||||||||
| 10.02.2014, 00:44 [ТС] | ||||||||
|
zebulun. Ох мой друг. Спасибо вам душевное большое. Спасибо за помощь и поддержку.
Добавлено через 22 минуты
0
|
||||||||
|
|
||
| 10.02.2014, 01:06 | ||
|
на 1100 населенных пунктов - это не здоровая БД, но если представить гипотетически одновременные запросы от 1000 пользователей, от 10 тыс. и при этом еще учесть кучу запросов на получение технических файлов - скрипты и стили. вот поэтому большинтсво сайтов по скорости загрузки оставляют желать лучшего. спасибо за приведенный код. но эти все действия у меня выполняет класс для работы с БД и неплохо с этим спарвляется. трудно разговаривать с прожженными консерваторами. и это тоже констатация факта....
0
|
||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||
| 10.02.2014, 09:55 | |||||||
|
Добавлено через 8 минут В общем, esculap_ra, если у вас нет ничего, кроме "мое лучшее имхо", то просьба ничего не писать.. Или предоставьте доказательства или хотя бы корректное утверждение того, что ваша идея лучше, или успокойтесь и хватит кидаться на всех с "консерватор"
0
|
|||||||
|
|
|
| 10.02.2014, 10:11 | |
|
1. В связанных селектах города-страны 218 стран(первичный селект)
2. В файле 1 раз записывается данные по городам для страны (для россии, например, это будет файл 1.json). по сути это тот же кэш полученных единожды данных и сериализированных данных. их то все равно необходимо сериализовать для передачи по сети. 3. Если такой файл еще не создавался, то клиент передает запрос на обработчик (скрипт geo.php): 1 раз для америки, 2-ой раз для россии, 3-тий раз для украины и т.д., в зависимости от выбираемого пункта. При этом сервер создает 1 запрос к БД чтобы получить эту инфу. Если же файл уже существует, то он просто скачивается минуя скрипт обработчика методом get в ассинхронном запросе и кэшируется на стороне клиента. И полученные данные (все города для конкретной страны) появятся во втором селекте. Эту фразу "JSON, наверное, на всех один, общий?" я понял неправильно, и говоря что общий имел в виду один для списка городов по каждой стране. И давайте заканчивать беспредметную полемику.
0
|
|
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||||
| 10.02.2014, 10:31 | ||||||||||
|
countries
0
|
||||||||||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|
| 12.02.2014, 15:40 [ТС] | |
|
zebulun. Я что-то явно делаю неправильно.
Когда отправляю пользователю сообщение(диалог возобновляется), я отправляю ему свой старый dialog_id(=1) и его dialog_id(=2). А как я увижу это своё отправленное сообщение? Ведь делаю выборку у себя в кабинете по другим данным: dialog_id=2 и dialog_id=3.
0
|
|
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||
| 12.02.2014, 20:01 | ||
|
А зачем вообще разделять на "диалоги-сообщения", если хотите "как в вконтакте" ? Вроде, там такого разделения нет.
Добавлено через 57 секунд
0
|
||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||
| 12.02.2014, 20:06 [ТС] | ||
0
|
||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||
| 12.02.2014, 20:10 | ||
|
stashappy, ну вот, смотрите. Есть стопка сообщений
0
|
||
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||
| 12.02.2014, 20:14 [ТС] | ||
0
|
||
| 12.02.2014, 20:15 | |
|
Не по теме: stashappy, ну лично я вижу мало смысла на разделение с таблицей диалоги в таком случае.. Хотя как знаете сами.
0
|
|
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||
| 12.02.2014, 20:17 [ТС] | ||
0
|
||
|
Почетный модератор
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
| 12.02.2014, 20:21 | |
|
Например, использовать не таблицу диалоги, а таблицу с удаленными сообщениями. Или в одной таблице все оставлять
Добавлено через 53 секунды Просто, в моем понимании, создавать разделение на диалоги только для того, чтобы удалять сообщения с одной стороны - это как-то неправильно. Хотя, может, конечно, я и ошибаюсь
0
|
|
|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
||
| 12.02.2014, 20:35 [ТС] | ||
0
|
||
|
71 / 71 / 13
Регистрация: 01.09.2011
Сообщений: 379
|
||
| 13.02.2014, 01:47 | ||
|
Во-вторых, когда пользователь отправил кому-либо сообщение, в таблице dialogs ищутся две записи, одна для того чтобы привязать это сообщение к отправителю, другая к получателю по условию: user1_id=id пользователя к которому привязывается сообщение(повторяю привязывается к отправителю и получателю,у меня там опечатка в описании dialogs, два раза написал user2_id в названиях столбцов, первый из них это user1_id) AND user2_id = id второго участника диалога AND deleted = 0, если такого совпадения не нашлось для кого-то из переписчиков(н-р отправитель удалил переписку(когда он удалил переписку со вторым пользователем, то запись в dialogs, где user1_id=id того кто удалил, user2_id = id того с кем была переписка помечается как удаленная)), то для того для кого не нашлось записи в dialogs, создается новая запись с новым id в таблице dialogs, но значения user1_id и user2_id не меняются, поэтому когда вы ищете сообщения, которые нужно показывать, вы находите запись в dialogs, где user2_id = id того, с кем переписка,и по id этой записи, ищете все сообщения в messages. Получается, пока юзер не удалил переписку, id его диалога не поменяется, и те сообщения, которые уже не видны, тому, из двух кто удалил переписку останутся видны, тому кто не удалял. Почему вы не увидите свое новое сообщение, после возобновления диалога?
1
|
||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|
| 13.02.2014, 02:37 | |
|
Не по теме: ох, как нибудь будет свободное время, перечитаю, что моно было в диалогах, расписать ан 6 страниц и так и не договориться :D Добавлено через 12 минут первое, что бросилось в глаза, это зачем в таблице диалогов, делать две связи, в обе стороны? второе, зачем два юзера в таблице мессагес? Добавлено через 6 минут subjects id, [user_id,] [title,] [time,] [flags] по сути главное id флаги могут быть, закрыта, приватная, общая... вообщем всё на что фантазии хватит и бит в поле ![]() можно хранить в юзер ид - создателя диалога, или убрать поле dialogs subject_id, user_id, flags первичный ключ по 2 полям флаги могут для конкретного юзера быть, например подписаться, оповещать, удалить... messages id, subject_id, user_id, time собственно ид дилаога для которого сообщение и ид юзера который отправил. чем не устраивает такой подход?
1
|
|
|
tommy13
|
|
| 25.03.2014, 03:23 | |
|
Доброй ночи, почитал вашу дискуссию..)
есть схожая задача - диалоги структуру БД прикрепил возникла сложность, как выбрать "последние диалоги" (собственно, как в вконтакте)? можно, конечно, "перебрать" по пользователям, но думается есть способ правильнее и проще по функционалу - только переписка между двумя пользователями, нет удаления сообщений. всего пользователей до 20 |
|
| 25.03.2014, 03:23 | |
|
Помогаю со студенческими работами здесь
59
Общение в виде чата между пользователями на сайте Работа с пользователями Слежка за пользователями Контроль над пользователями. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В качестве. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|