[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Занос в бд...
Reflexion
Нужно написать некоторый чат с поддержкой привата многим пользователям, как занести в базу пользователей по id таким образом чтоб потом можно было выбрать кому должно дойти сообщение. Единственное что приходит в голову создать довольно большое колличество получателей и все эти поля в БД проидексировать и при выборе сравнивать свой id с 15шт в базе, если совпал - выводить. Но наверняка метод не из лучших, можете подкинуть идею как сделать лучше



Спустя 50 минут, 14 секунд (9.01.2011 - 13:56) 2038 написал(а):
Каждому сообщению давать свой id.
Создать поле user_id, которое по умолчанию = ""

Если сообщение приватное - добавить номер пользователя в user_id.

Спустя 55 секунд (9.01.2011 - 13:56) 2038 написал(а):
Ну а потом соответственно
SELECT id FROM table WHERE user_id=[id пользователя]


Кстати раздел форума вы выбрали неправильный.

Спустя 2 часа, 10 минут, 59 секунд (9.01.2011 - 16:07) Reflexion написал(а):
тогда получатель не увидит кому ещё были отосланы эти сообщения

Спустя 1 час, 52 минуты, 8 секунд (9.01.2011 - 18:00) sergeiss написал(а):
Надо, наверное, создать как минимум пару таблиц. В первой находятся id и описания юзеров, во второй находятся связи этих юзеров. Типа такого:
id_main | id_satellite
Тогда ты всегда выберешь всех юзеров, зависимых (связанных) с определенным, точно также, как и всех юзеров, у которых зависимый (id_satellite) находится в зависимости. И тут же можешь всегда легко и просто редактировать эти взаимосвязи. А описания юзеров в основной таблице при этом не трогаются.

PS. Заодно тему перенес в другой раздел.

Спустя 3 часа, 36 минут, 16 секунд (9.01.2011 - 21:36) Игорь_Vasinsky написал(а):
следущая тема будет - Вынос из бд

Спустя 41 минута, 29 секунд (9.01.2011 - 22:17) Reflexion написал(а):
скажите пжл что вы имеете ввиду под "связыванием", "редактированием взаимосвязей"? Как это сделать и что это даст?

Спустя 12 минут, 54 секунды (9.01.2011 - 22:30) sergeiss написал(а):
Цитата (Reflexion @ 9.01.2011 - 23:17)
скажите пжл что вы имеете ввиду под "связыванием", "редактированием взаимосвязей"? Как это сделать и что это даст?

Объясняю...
Вот в одной таблице ты создал данные: айди пользователя, какие-то его данные. Одна строка - один пользователь.
Затем тебе надо указать, какой пользователь с каким другим взаимодействует (в частности, кому надо будет доставлять сообщения от него). Для этого и нужна вторая таблица.
Примерно так...
Первая таблица
id | name
1 | Вася
2 | Петя
3 | Серёга
5 | Михан
6 | Санёк
7 | Игорь

А во второй таблице укажем взаимосвязи между ними ("свяжем" их):
id_main | id_satellite
1 | 2
1 | 3
1 | 7
2 | 1
2 | 6

То есть, используем айди из первой таблицы для указания взаимосвязей между юзерами. Если добавить еще третий параметр, "тип связи", то можно во второй таблице вообще много чего хранить smile.gif Например, кто с кем в чате (кому рассылку делать), кто кому "друг", кто у кого в игноре и много чего другого.

Так понятнее?

Спустя 6 минут, 26 секунд (9.01.2011 - 22:37) Reflexion написал(а):
думал это по другому называется, я думал можно как-то именно связывать таблицы, тоесть связка имеется ввиду Select main.* FROM main_table, chat_table WHERE main_table.id_main=chat_table.id_satellite... Но как при помощи таких связей сделать приват сразу нескольким пользователям?

Идея же в том чтобы отправлять приват сразу 1-N пользователям

Спустя 5 минут, 31 секунда (9.01.2011 - 22:42) sergeiss написал(а):
Дык... Ты потом и свяжешь их в запросе, так, как тебе надо. Вариантов много всяких можно придумать.
Я написал именно про структуру таблиц, которые потом ты уже будешь использовать так, как тебе надо.

Спустя 13 минут, 26 секунд (9.01.2011 - 22:56) Reflexion написал(а):
У меня таким образом хватает только на то чтобы занести в основную БД всю информацию о сообщении а в другую для кадого получателя заносить ид получателя и ид сообщения. Тоесть при отправки сообщения будет нечто такое

INSERT INTO messages (id,message,date,sender_id) values (1,text,1232348289,1)
INSERT INTO messages_stats (message_id, recipient_id) values (1,4);
INSERT INTO messages_stats (message_id, recipient_id) values (1,5);

При выводе в чат получится

$data=SELECT * FROM messages WHERE date>(time()-300);
if($data['sender_id']=$id){echo "";}
else
{ $tmp = SELECT messages .* FROM messages,messages_stats WHERE messages_stats.recipient_id=$id AND messages_stats.id_massage=messages.id_message AND messages.date>(time()-300);
if(mysql_nuw_rows($tmp)) {$tmp=mysql_fetch_assoc($tmp); echo ""}
}

Если это то как как увидеть то что посылалось это не только не тебе а ещё и другим пользователям? Тоесть ты увидишь что это сообщение адрессовано тебе, но не узнаешь кому ещё

Спустя 1 час, 21 минута, 58 секунд (10.01.2011 - 00:18) sergeiss написал(а):
У меня встречное предложение... Точнее, их несколько :)

1. Используй тэги оформления кодов, чтобы они были с подсветкой (это кнопки PHP, SQL, HTML и другие справа над окном редактирования текста)
2. Когда пишешь запрос, то пиши, что ты хочешь им получить, с какой целью он написан. Чтобы не было разночтений.

PS. А вот это твоё
echo "";

напомнило мне анекдот "программист на ночь ставит на стол рядом с собой стакан с водой на случай, если захочет попить и пустой стакан на случай, если не захочет пить" ;)

Спустя 10 минут, 40 секунд (10.01.2011 - 00:28) Reflexion написал(а):
ну с заносами в базу думаю понятно, просто заносится в БД, а выборка делается так, если ты отправитель то вывести тебе на экран, если нет поискать твой айди в списках получателей, если нашлось в каком либо из случаев то через эхо что-то будет выводится на экран)

Спустя 2 минуты, 37 секунд (10.01.2011 - 00:31) Reflexion написал(а):
но это же не то, что вы советовали в первом сообщении? Или то?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.