Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2008, 11:46   #1
bammm
 
Регистрация: 25.09.2008
Сообщений: 7
По умолчанию алгоритм для обмена сообщениями

Здравствуйте
Помогите в алгоритме для следующей задачи
Нужно реализовать обмен сообщениями между зарегистрированными пользователями на php+mysql.
Получил совет создать таблицу msg(id, from_user_id, to_user_id, text, date, parent_msg)
Но я думаю это будет занимать слишком много процессорного времени и ресурсов оперативной памяти даже для того чтобы сформировать список между какими пользователями происходил диалог. Может есть способы пооптимизированнее?
Заранее спасибо
bammm вне форума Ответить с цитированием
Старый 25.09.2008, 12:29   #2
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

можно создать 3 таблицы.
1 таблица - пользователи - users
id_user,user_name и тд
2 таблица - все сообщения - messages
id_message,message_txt и тд
3 кросс таблица - cross
id_cross, id_user_from, id_user_to, id_message
При этом самая нагруженная таблица cross будет минимальна по размеру и постоянно в работе, что гарантирует её кеширование...

Внешне кажется что это будет работать медленнее, но все релятивистские базы данных заточены под такую схему

Быстродействие в большей степени зависит от оптимизации запросов к бд, пользуйтесь триггерами, функциями бд и будет быстродействие
Стрелок-охотник

Последний раз редактировалось mv28jam; 25.09.2008 в 12:39. Причина: -
mv28jam вне форума Ответить с цитированием
Старый 25.09.2008, 14:07   #3
bammm
 
Регистрация: 25.09.2008
Сообщений: 7
По умолчанию

расскажи про таблицу кросс если не затруднит
bammm вне форума Ответить с цитированием
Старый 25.09.2008, 14:46   #4
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

Таблица кросс нужна для формирования свезей между id-идентификаторами, есть такие понятия как PK(primary key)первичный ключ и FK(foreign key)внешний ключ, кросс таблица хранит исключительно ключи FK, кроме своего PK(нужен только системе). FK - это PK в какой-то таблице. Поскольку ключи воосном integer и небольшого размера то их сравнение и кеширование не отнимает много ресурсов + поскольку вся информация о связях хранится в этой таблице и кней часто обращаются БД кеширует её. Это можно увидеть по времени выполнения запроса в phpmyadmin, повторно посланный запрос отработается быстрее.
Пример:
у Вас есть группы пользователей причем один пользователь может состоять в нескольких группах
делаем 3 таблицы
1)Группы с PK id_group
2)Пользователи с PK id_user
3)Кросс таблица, где мы пишем какой id_user "состоит" в группе id_group
"столбцы" таблицы кросс(id_cross,id_user_cross,id_gro up_cross)
id_user_cross,id_group_cross - это FK
Так понятней?
Стрелок-охотник

Последний раз редактировалось mv28jam; 25.09.2008 в 14:49. Причина: -
mv28jam вне форума Ответить с цитированием
Старый 26.09.2008, 11:15   #5
bammm
 
Регистрация: 25.09.2008
Сообщений: 7
По умолчанию

Понятно. спасибо!
bammm вне форума Ответить с цитированием
Старый 26.09.2008, 11:31   #6
bammm
 
Регистрация: 25.09.2008
Сообщений: 7
По умолчанию

подскажите как запрос
"select to_user_id from msg where from_user_id=5;" сделать таким чтобы он выбирал строки с уникальным to_user_id
bammm вне форума Ответить с цитированием
Старый 26.09.2008, 15:01   #7
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

не понял...
to_user_id и так уникальное поле в таблице с юзерами, а в таблице msg может быть не одно сообщение в котором from_user_id=5, или имеется ввиду если запись одна?
Вообщем задайте вопрос конкретнее.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 01.03.2011, 19:26   #8
marlorn
 
Регистрация: 01.03.2011
Сообщений: 3
По умолчанию

сделал так же 3 таблицы, но вопрос такой, как организовать раздел отправленных сообщений и удаленных, ведь если одному и тому же сообщению в таблице кросс делать графу отправлено удалено то у другого пользователя оно тоже будет таковым, объясните как?
marlorn вне форума Ответить с цитированием
Старый 02.03.2011, 08:22   #9
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,714
По умолчанию

Цитата:
ведь если одному и тому же сообщению в таблице кросс делать графу отправлено удалено то у другого пользователя оно тоже будет таковым, объясните как?
Можно добавить 2 поля в кросс таблицу, в которых записывать состояние сообщения для отправителя и для получателя.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 02.03.2011, 10:19   #10
marlorn
 
Регистрация: 01.03.2011
Сообщений: 3
По умолчанию

так и сделал... вот что получилось...


вопрос... так и не нашел рабочего примера как сделать подсветку строк при наведении и как при нажатии на кнопку удалить, передать id конкретного сообщения, чтобы это сделать должен выбираться чекбокс... тоже не нашел как это автоматом сделать... help!! мозг кипит
Изображения
Тип файла: jpg 1.jpg (13.1 Кб, 134 просмотров)
marlorn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простой клиент обмена сообщениями eks-s Работа с сетью в Delphi 1 04.03.2008 01:03
Обмен сообщениями без IP адреса Иллидан Работа с сетью в Delphi 9 29.02.2008 20:48
Алгоритм обмена ключами Диффи-Хеллмана Victor1987 Помощь студентам 0 04.12.2007 01:19
Мой собственный модуль работы с сообщениями Sibedir Софт 7 17.11.2007 01:23