Сообщения в виде диалогов

1. Мага (09.03.2012 / 17:11)
Здравствуйте. Хотел реализовать у себя на сайте личные сообщения в виде диалогов и не имею даже представления, как это организовать. Существующая личка создает файлы по типу inUsername и outUsername, где хранятся входящие и исходящие сообщения соотвественно...

2. ramzes (09.03.2012 / 17:13)
база данных нужна, или извращаться придется

3. Мага (09.03.2012 / 17:19)
Значит потрачу время на полную переделку, я предполагал, что нужна будет база. Можешь описать алгоритм?

4. ensteyn-asen (09.03.2012 / 23:39)
даже на файлах можно сделать все прелестно

Добавлено через 00:53 сек.
WolfEYE (9 Марта 2012 / 16:19)
Значит потрачу время на полную переделку, я предполагал, что нужна будет база. Можешь описать алгоритм?

алгоритм:
определяешь свой логин и логин пользователя для диалога
сортируешь сообщения пренадлежащие 2м логинам
выводишь

Добавлено через 01:24 сек.
тебе пример на файлах дать или на БД ??

5. Мага (10.03.2012 / 19:18)
На бд, если нетрудно.

6. ramzes (10.03.2012 / 19:27)
Смотря какая структура таблицы

7. Мага (10.03.2012 / 19:51)
Допустим, просто два поля, Логин и Сообщение

8. Мага (10.03.2012 / 22:45)
Жду...

9. AlyOha (10.03.2012 / 22:48)
WolfEYE (10 Марта 2012 / 19:51)
Допустим, просто два поля, Логин и Сообщение
это как так, а он никому не пишет получается..

10. Мага (10.03.2012 / 22:50)
На ум приходит только создание для каждого пользователя двух таблиц, с вх и исх личкой

11. AlyOha (10.03.2012 / 22:51)
(select * from `dialogs` where `author`=? and `user`=? order by `time` desc limit 0, 10;", array($ya, $user))

12. Мага (10.03.2012 / 23:00)
Таблица "dialogs"? Не осилил

13. Мага (11.03.2012 / 08:42)
Может кто объяснить? Заранее благодарен.

14. ramzes (11.03.2012 / 09:41)
WolfEYE (10 Марта 2012 / 22:50)
На ум приходит только создание для каждого пользователя двух таблиц, с вх и исх личкой
От кого, кому, дата, текст, тема, прочтенное или нет, и дальше по желанию

15. Мага (11.03.2012 / 15:26)
Спасибо. Ну а как из этого составить диалоги?

16. BogdaneS (11.03.2012 / 15:41)
mysql_query("select * from `dialogs` where `author`='$user' and `user`='$avtor' or `author`='$avtor' and
`user`='$user' order by `time` desc");

Добавлено через 02:08 сек.
Просьба ногами не бить))

17. ramzes (11.03.2012 / 16:38)
Все верно

18. Мага (11.03.2012 / 18:10)
Я так понимаю, это выведет диалог, спасибо. А как вывести список диалогов?

19. Сергей (12.03.2012 / 06:03)
Список диалогов этих двух юзеров?

Самоё простое можно сортировать по дню, типа диалог сегодня, вчера и тд.

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

20. Мага (13.03.2012 / 20:26)
Bogdanes взялся мне помочь, за что ему спасибо. Всем остальным тоже спасибо.
<?
$query=mysqli_query($sql, "CREATE TABLE ".$login."
(LOGIN   CHAR(100)   NOT NULL,
STATUS   CHAR(1)   NOT NULL)");
?>
Вопрос: почему код выше не создает таблицу с именем, содержащимся в $login?

21. Мага (13.03.2012 / 22:57)
Очень нужна помощь...

22. ramzes (13.03.2012 / 23:45)
зачем такое извращение?

23. ДимаН (14.03.2012 / 00:00)
Зачем в виде диалогов ?

24. Алексей (14.03.2012 / 00:25)
По идее, просто сортировка по времени - это не совсем диалог (я, по крайней мере, вижу это немного иначе).

Чтобы было более-менее похожее на настоящие даилоги, надо выводить именно ветки связанных сообщений.

За один день может быть несколько отдельных диалогов. Выводим первое сообщение диалога, разворачиваем весь в случае необходимости.

Реализовать можно так - ты пишешь мне, я тебе отвечаю, ты мне - я тебе и так далее. То есть считать за диалог именно цепочку сообщений, когда один отвечает другому. Если один написал, другой ему ответил, пишем в базу, что сообщение, на которое ответили - первое сообщение ветки диалога, сохраняем id ветки диалога, который будет писаться и в другие сообщения, которые будут идти при ответе на последующие сообщения ветки.

Эм.. кто-нибудь вообще понял, о чем? Как-то я кажется мутно описываю..

Пример :

Вася пишет Сереже - привет, как дела?
Сережа отвечает Васе - Дарова, нормально! // в этом момент создаем в таблице диалогов новую запись (ведь Сережа ответил Васе, и это можно считать началом диалога). ID вставляем в свойства первого и второго сообщения.
Вася отвечает Сереже - Че, живой после вчерашнего? // смотрим, есть ли у предыдущего сообщения ID диалога и если есть, пишем в свойства текущего сообщения. И так далее, по аналогии.

Насчет оптимизации и структуры таблиц надо, конечно, думать. Я просто план примерный накидал.

Автор, тебе что-то типа этого надо или просто упорядочивание сообщений по такому параметру, как кто кому написал?

25. ramzes (14.03.2012 / 00:29)
XdN (14 Марта 2012 / 00:25)
Эм.. кто-нибудь вообще понял, о чем? Как-то я кажется мутно описываю..
конечно)) у меня давно такое

26. Алексей (14.03.2012 / 00:35)
25. ramzes, осталось еще узнать у автора, это ли он имел ввиду.

P.S. Тоже думал как-то подобное реализовать, но, чаще всего это мало кому нужно будет на сайте. Проще просто сделать систему папок - просмотр переписки с отдельным юзером + отдельно входящие - исходящие. Это можно сделать даже без кучи таблиц и дубляжа сообщений.
Это менее мутно для кодера и проще для восприятия простыми юзерами. А то, что я описал, автору не советую. Если только это совсем уж не необходимо.

27. ramzes (14.03.2012 / 01:02)
26. XdN, это как раз очень удобно
1. частенько не помню о чем вообще речь шла
2. наглядно видно весь диалог
3. не загружает страницу ненужными сообщениями из других тем
ну и т.дsmile
в общем удобно имхо

28. Мага (14.03.2012 / 07:32)
Нужна система сообщений, подобная вконтакте: папки "входящие", "исходящие" и "диалоги", ну вы поняли, думаю.

Добавлено через 02:06 сек.
ramzes (13 Марта 2012 / 23:45)
зачем такое извращение?
в смысле? Создать для каждого юзера таблицу со списком его друзей хотел, разве извращение? Просто только изучаю базы, не знаю, как по-другому реализовать.

29. Андрюха (14.03.2012 / 08:09)
Конечно извращение. 1000 юзеров,1000 таблиц. Черт ногу сломит

30. ramzes (14.03.2012 / 08:39)
Wapruks (14 Марта 2012 / 08:09)
Конечно извращение. 1000 юзеров,1000 таблиц. Черт ногу сломит
плюс некоторые выборки будут просто ужасны, из десятка таблиц (список диалогов например)

31. Мага (14.03.2012 / 19:41)
Почему скрипт вообще ничего не записывает, если в коде присутствует переменная? Mysqli

32. Мага (14.03.2012 / 19:56)
<?
$requ=mysqli_query($sql, "INSERT INTO `users` (`login`,`color1`,`color2`) values ('".$login."','".$incolor1."','".$incolor2."')");
?>
что здесь не так? Не хочет записывать.

33. Мага (14.03.2012 / 21:16)
Очень нужна помощь, срочно...

34. ramzes (14.03.2012 / 21:54)
echo mysqli_error();

35. Мага (14.03.2012 / 22:04)
Ничего не выводит

Добавлено через 02:54 сек.
В phpMyAdmin данный запрос, только со строчными данными вместо переменных работает

36. ramzes (14.03.2012 / 22:35)
попробуй mysqli_query("INSERT INTO users SET login = '".$login."', color1 = '".$incolor1."' .... ;"); echo mysqli_error();

37. Мага (14.03.2012 / 22:45)
Не пишет, не выводит ошибку... Да в чем дело же...

38. ramzes (14.03.2012 / 22:58)
37. WolfEYE, добавь и в квери и в еррор $sql,
я про них забыл, не использую процедурный мускулиsmile

39. Мага (14.03.2012 / 23:05)
Ноль эмоций вообще.

40. ramzes (14.03.2012 / 23:05)
тогда не знаю, по мистике я не спец

41. Мага (14.03.2012 / 23:06)
Пробовал уже)

Добавлено через 01:43 сек.
В phpMyAdmin все прекрасно выполняется, с соединением с базой проблем нет...

42. Мага (14.03.2012 / 23:23)
Исходники что ли скинуть...

Добавлено через 02:42 сек.
<?
$sql=mysql_connect("localhost", "soci", "password", "social");
$incolor1='#1FBCFF';
$incolor2='#2945FF';
$login=mysql_real_escape_string($login);
$query=mysql_query($sql, "INSERT INTO users SET login = '".$login."', color1 = '".$incolor1."', color2 = '".$incolor2."';");
echo mysql_error($sql);
?>

Добавлено через 03:31 сек.
Даже попробовал просто на mysql сделать, как видите. Никак...

43. ramzes (14.03.2012 / 23:27)
mysql_connect("localhost", "soci", "password", "social");
не мускул а мускули, должно быть
______
а, у тебя там вообще все мускул_*

44. Мага (14.03.2012 / 23:27)
Это я пробовал просто. Там было мускули

Добавлено через 00:58 сек.
Просто убрал i отовсюду.

45. Мага (15.03.2012 / 17:47)
Неужели проблема нерешаема?

46. Александр (15.03.2012 / 17:58)
если убрал i отовсюду то добавь mysql_select_db вместо 4 параметра у connect

Добавлено через 01:31 сек.
потом поменяй параметры у mysql_query местами

47. Вусал (15.03.2012 / 18:20)
у меня на сайте только диалоги... И это почти уже везде так делается...
У меня такая система...
Есть две таблицы... Первая со списком диалогов а во второй сообщении...
Когда пишется первое новое сообщение, идет запись -
в диалоги
user1 = moy id
user2 = druga id
и в таблицу с сообщениями
user1 = moy id
user2 = druga id
msg = samo soobshenie

конечно же Если диалог уже существует новой записи уже не будет...
вывод диалогов
select * from dialogi where user1=moyid and user2=drugaid or user2=moyid and user1=drugaid

вывод сообщений точно так же как и диалоги...

Но есть еще заморочки с оповещением... Типа сколько новых сообщение... Сколько надо уменьшать не прочитаных сообщений... Т.е. у меня три новых сообщений.. Два это от одного диалога и еще одно от другого...
В моторе и роторе там когда заходишь в приват все новые сообщение = 0... С диалогами тяжелее...

URL: https://visavi.net/topics/30329