|
MySQL.RU - Webboard
Вернуться
Оцените плз мою технику... (Кирс) 08/12/2001 - 17:33:19
Re: Оцените плз мою технику... (Василий) 10/12/2001 - 13:05:09
Re: Оцените плз мою технику... (Кирс) 12/12/2001 - 11:59:50
> Original message text:
> From: Кирс - 08/12/2001 - 17:33:19
> Subject:Оцените плз мою технику...
> -----------------
> Подскажите плз, в правильном ли направлении я свои извилины развиваю:
>
> Структура моего сайта очень похожа на форум ( например типа vBelltin, но только с двумя ступенями - "ветка" и безответвленные высказывания в ней ), но с таким моментом, что за кажное высказывание можно голосовать. Я хочу чтобы в сессии пользователя сохранялась информация о каждом высказанном им голосом. Но так как веток моего "форума" может быть дофига, а сообщений в каждой ветке еще больше, то получается, что запомнить такой объем инфы о каждом пользователе можно только с помощью MySQL ( на PHP ). Так вот, мыслю я таким образом:
>
> При заходе на сайт, PHP генерирует пользователю идентификационный номер, например, ID=144xGHDKFNJCKLWSJWDK ( кусок 144x, обозначает выданный ID пользователю в таблице, для быстрого доступа в базе данных ), который заносится в определенную таблицу ( например user ) вместе с IP пользователя и текстовой ячейкой, в которую будут шифроваться высказанные пользователям голоса. Каждый раз, когда будет необходимо обработать информацию о пользователе ( например , когда пользователь отдал свои голоса высказванием "форума" и нажал кнопку "голосовать"), PHP код страницы считывает ID из строки параметров, выделяет id, данный в таблице (144), читает нужную строку из таблицы user из позиции 144, сравнивает ID - GHDKFNJCKLWSJWDK, сравнивает IP и текстовое поле таблицы пополняет информацией о выборе пользователя. ( кстати, информацию я мыслю сохранять так - каждой ветке "форума" я буду давать допустим, 200 байтов информации по байту на каждое высказывание в ветке, например 00001x104032402304...( и так 200 ячеек)...023 , здесь первые 5 цифр (до x) означают id ветки, а все что после x это описание поставленных пользователям оценок каждому высказыванию (0-нет высказ., 1-кол,...5-отл.). Т.е. проголосовал юзер в ветке с id 00004, в текстовое поле табл. user добавляется 206 байт инфы о ветке 00004, проголосовал в ветке 00102 - плюс еще 206 байт инфы... вернулся снова в ветку 00004, сканируем текстовое поле шагоом 206, находим необходимый участок и заменяем этот участок обупдатерной инфой о ветке 00004).
>
> Допускаю, что все что я навыдумал - фигня и все можно сделать намного легче... но к сожалению я только недавно начал работать с MySQL и PHP и еще не знаю принципы выхода из таких положений и прихоится изобретать вот такие велосипеды.
>
> Заранее спасибо за подсказки и предложения.
>
>
From: Василий - 10/12/2001 - 13:05:09
Subject:Оцените плз мою технику...
-----------------
Конечно, так тоже можно.
Но можно и проще :)
create table tb_users(id int(8), ip_addr varchar(255), primary key (id));
create table tb_votes(user_id int(8), branch_id int(4), sentence_id int(4), vote int(1), primary key(user_id, branch_id, sentence_id));
4 - потому что вряд ли, наверное, будет больше 10000 веток и больше 10000 высказываний на ветку, а оценки в диапазоне от 0 до 9.
во второй таблице primary key нужен, если голосовать разрешается только один раз за сеанс.
а зачем помимо номера пользователю ещё давать строку GHDKFNJCKLWSJWDK? Номера-то вполне хватит.
а в общем, по теории, неправильно держать все в одной таблице. На то и есть реляционность, чтобы по таблицам разбивать. Если у пользователя может быть больше одной оценки (отношение "один ко многим"), то пользователей и оценки надо разносить в 2 таблицы, а не мучаться с поиском по строке и т.д.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
1134
|
|