Есть таблица пользвателей для самописного двига Code: CREATE TABLE IF NOT EXISTS `bb_user` ( `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(60) NOT NULL DEFAULT '', `username` varchar(60) NOT NULL DEFAULT '', `pwd` varchar(32) NOT NULL, `disabled` tinyint(3) unsigned NOT NULL DEFAULT '0', `en_exp_modify` tinyint(3) unsigned NOT NULL DEFAULT '0', `bb_sid` varchar(32) NOT NULL DEFAULT '', `bb_ads_max` smallint(5) unsigned NOT NULL DEFAULT '0', `free_ad_used` tinyint(3) unsigned NOT NULL DEFAULT '0', `lastlogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `lastlogin_ip` varchar(255) NOT NULL DEFAULT '', `lastlogin_failure` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `lastlogin_token` varchar(32) NOT NULL DEFAULT '', `regdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `reg_ip` varchar(30) NOT NULL DEFAULT '', `exp_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `txn_id` varchar(255) NOT NULL DEFAULT '', `bb_177_1` varchar(255) NOT NULL DEFAULT '', `bb_177_2` varchar(255) NOT NULL DEFAULT '', `bb_177_3` varchar(255) NOT NULL DEFAULT '', `bb_177_4` varchar(255) NOT NULL DEFAULT '', `bb_177_5` varchar(255) NOT NULL DEFAULT '', `bb_177_6` varchar(255) NOT NULL DEFAULT '', `bb_177_7` varchar(255) NOT NULL DEFAULT '', `bb_177_9` varchar(255) NOT NULL DEFAULT '', `bb_177_10` varchar(255) NOT NULL DEFAULT '', `bb_177_11` varchar(255) NOT NULL DEFAULT '', `bb_177_12` varchar(255) NOT NULL DEFAULT '', `bb_177_13` varchar(255) NOT NULL DEFAULT '', `bb_177_14` varchar(255) NOT NULL DEFAULT '', `bb_177_15` varchar(255) NOT NULL DEFAULT '', `bb_status` text NOT NULL, `images` text NOT NULL, `bb_ml_list` varchar(255) NOT NULL DEFAULT '', `bb_af_id` smallint(5) unsigned NOT NULL DEFAULT '0', `bb_credits` decimal(9,2) NOT NULL DEFAULT '0.00', `bb_credits_use` char(1) NOT NULL DEFAULT '', `bb_scart_userinfo` text NOT NULL, `bb_scart_shipid` varchar(100) NOT NULL DEFAULT '', `bb_177_16` varchar(255) NOT NULL DEFAULT '', `bb_177_8` varchar(255) NOT NULL DEFAULT '', `bb_177_17` varchar(255) NOT NULL DEFAULT '', `bb_177_18` varchar(255) NOT NULL, `bb_177_19` varchar(255) NOT NULL, `bb_opts` text NOT NULL, `bb_177_20` varchar(255) NOT NULL, `id_host` int(3) NOT NULL, `bb_remind` smallint(5) NOT NULL DEFAULT '-1', `bb_region_id` smallint(5) unsigned NOT NULL, `bb_pribb_msg_notify` char(1) NOT NULL, `bb_pribb_msg_reply` char(1) NOT NULL, `bb_pribb_msg_boxsize` mediumint(8) unsigned NOT NULL, `int_1` int(11) NOT NULL, `site_active` int(3) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), UNIQUE KEY `username` (`username`), KEY `bb_af_id` (`bb_af_id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ; Работа двига организована так, что к этой таблице пользователей идет обращение с 30 сайтов, где один и тот же пользователь может иметь несколько разных статусов с различным времением их истечения, пришла мысль о создании для каждого сайта (хоста) отдельного поля статуса. Таким образом, добавляется 30 полей `bb_status_1` text NOT NULL, `bb_status_2` text NOT NULL, и т.д. 1. Насколько такая структура таблицы скажется на производительности? 2. Каковы варианты организовать структуру таблицы пользователей по-другому, если для статуса bb_status должен соответствовать отдельный хост (сайт)?
Не надо 30 полей. Лучше сделать 2 поля: сайт и статус. Заиметь 30 записей. Во-первых, это будет без лишней избыточности. Во-вторых, гибко - ты можешь добавить запись с другим сайтом и статус. А вообще почитай вику о нормальной форме таблиц .
не правильно советуеш) если ты имееш в виду в эту таблицу вместо 30 сайтов влепить 2 столбца сайт и статус то это тоже будет не верно ибо у него это таблица авторизации) как вариант создать новую таблицу с полями user_id или user_login который мы берем либо из сессии либо с таблицы users а так же те самые 2 поля которые советовал 4upakabr0 т.е структура будет примерно user_id , site, status для экономия места user_id естествено числовой, status естествено может быть тоже числовой как двоичный код 0 - оффлайн 1 онлайн а за site можно брать varchar (40) а за отслеживание какой имено сайт можно использовать функцию $_SERVER['HTTP_HOST']
Создай 2 таблицы. Первая STATUS с полями: Code: user_id | site_id | status Сделай справочник сайтов с двумя полями и 30-ю записями, назви SITES, поля: Code: id | name_of_site Сначала забираешь Code: $site_id=select form SITES id where name_of_site=$_SERVER['HTTP_HOST'] потом чекаешь таблицу STATUS: Code: $status=select from STATUS status where site_id=$site_id and where $user_id=$user_id
PATCH,4upakabr0, Благодарю за помощь! Небольшое уточнение - статус пользователя непостоянный, следоватеьльно, нужно будет создать поля: время присвоения статуса, время истечения статуса. Еще одно обстоятелство - я хотел решить проблему с минимальными изменениями в скрипте. Скрипт изначально был для одного хоста. Вижу, что без отдельной таблицы не обойтись.
Что именно? Небольшое уточнение: - в таблице 50.000 пользователей, если кол-во сайтов равно 30, то записей в таблице должно быть 1 500 000