|
42 / 42 / 13
Регистрация: 21.08.2011
Сообщений: 625
|
|
Диалоги между пользователями07.02.2014, 12:33. Показов 12859. Ответов 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
Общение в виде чата между пользователями на сайте Работа с пользователями Слежка за пользователями Контроль над пользователями. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|