Re: phpMyAdmin 2.7
CREATE TABLE groups (
gid tinyint (3) unsigned NOT NULL auto_increment COMMENT 'номер групи',
gname varchar (50) NOT NULL default '' COMMENT 'назва',
gabout tinytext COMMENT 'додаткова інформація',
PRIMARY KEY (gid)
) ENGINE = MyISAM DEFAULT CHARSET = koi8r;
CREATE TABLE moders (
muid int (11) NOT NULL default '0' COMMENT 'номер користувача',
mgid int (11) NOT NULL default '0' COMMENT 'номер групи',
mact enum ( 'y', 'n') NOT NULL default 'y' COMMENT 'активний чи. Зроблено для уникнення провалів в ключах ',
PRIMARY KEY (muid, mgid)
) ENGINE = MyISAM DEFAULT CHARSET = koi8r;
CREATE TABLE users (
uid smallint (5) unsigned NOT NULL auto_increment COMMENT 'номер користувача',
ulogin varchar (20) NOT NULL default '' COMMENT 'логін',
upass varchar (23) NOT NULL default '' COMMENT 'пароль',
uname varchar (50) NOT NULL default '' COMMENT 'ім'я',
uinfo tinyblob COMMENT 'додаткова інформація',
ucity varchar (20) default NULL COMMENT 'місто, де знаходиться',
ucountry varchar (20) default NULL COMMENT 'країна',
uicq varchar (12) default NULL COMMENT 'номер аськи. Треба буде зробити номер для жаббера ',
ugender enum ( 'f', 'm') default NULL COMMENT 'підлогу користувача. в принципі необов'язкове поле, але нехай буде ',
uemail varchar (50) default NULL COMMENT 'мило користувача. must be for password recovery ',
utoor enum ( 'y', 'n') NOT NULL default 'n' COMMENT 'адмін чи ні. треба буде щось зробити, бо інфа дублюється, навіть спец. таблиця moders є. ',
ubanned enum ( 'y', 'n') NOT NULL default 'n' COMMENT 'забанили чи ні',
PRIMARY KEY (uid)
) ENGINE = MyISAM DEFAULT CHARSET = koi8r;
З.И. там ще є таблиця fortunes, з фортункамі, але вона необов'язкова.
З.З.И. ну і як я говорив, таблицю moders можна викинути через наявність utoor прапора в users.
Re: phpMyAdmin 2.7
Чого б тоді однією таблицею не обійтися? Повідомлення і все. Навіщо ще щось. )
Re: phpMyAdmin 2.7
а можна взагалі без таблиць, просто на папірці писати фрази і один одному пересилати поштою =)))
Re: phpMyAdmin 2.7
Я робив не так, але у мене було завдання створити гнучкий форум, з довільним числом тем / рівнів, і з "ланцюжками" повідомлень, тому довелося перекрутити, і обійтися двома таблицями :-)
themes / messages - по суті речі одного порядку і об'єднуються в одну таблицю, в кожному записі зберігаються посилання на "голову", попереднє повідомлення (а для ефективності і на все пов'язаний з ним - одне з полів зберігає список ВД пов'язаних повідомлень)
Re: phpMyAdmin 2.7
тільки що заради інтересу зайшов на phpMyAdmin нашого порталу і глянув скільки таблиць в базі, яка прикручена до нашої CMS. 116 таблиць;) і 236 406 записів всього.
Re: phpMyAdmin 2.7
а ось хто може підказати елегантне рішення такого завдання. Є кілька "дерев" повідомлень. Треба виводити кількість повідомлень в кожній "гілці" і подветкой дерева і ШВИДКО оновлювати їх динамічно при додаванні повідомлень в будь-яке місце дерева. Рекурсивний обхід дерева кожен раз занадто важкий. Зберігання IDs всіх пов'язаних гілок в кожній гілці і їх підрахунок не підходить - оскільки є кілька дерев. Ще варіанти?
Re: phpMyAdmin 2.7
mysql> create database reftest;
Query OK, 1 row affected (0.00 sec)
mysql> use reftest;
Database changed
mysql> create table refmaster (
-> Mid int not null primary key auto_increment,
-> Mname varchar (20) not null) type = innodb;
Query OK, 0 rows affected (0.16 sec)
mysql> create table refslave (
-> Sid int not null,
-> Stext tinytext not null,
-> Foreign key (sid) references refmaster (mid)) type = innodb;
ERROR 1005: Can not create table './reftest/refslave.frm' (errno: 150)
mysql> create table refslave (
-> Sid int not null references refmadter (mid),
-> Stext tinytext not null) type = innodb;
Query OK, 0 rows affected (0.03 sec)
mysql> insert into refmaster values ( "", "hi");
Query OK, 1 row affected (0.01 sec)
mysql> insert into refslave values ( "5", "hello");
Query OK, 1 row affected (0.01 sec)
це посилальна цілісність?
або може я не так роблю щось?
З.И. по ідеї він дожен в другому інсерти закричати благим матом, що немає такого індексу, ан хрін.
Re: phpMyAdmin 2.7
дик завдання то - зібрати число "гілок" в кожному поддереве. Вирішується "в лоб" через рекурсивний COUNT всіх гілок лежить "нижче" і збереження цього COUNT в запису кожної гілки як лічильник (оновлювати його тільки при додаванні нового повідомлення). Але і це важко. Треба легше рішення.
Re: phpMyAdmin 2.7
ну тоді ймовірно доцільніше зробити Id незалежні лічильники, які будуть зменшуватися / збільшуватися при видаленні / додаванні записи для всіх груп в які вони потрапляють. Каунт впринципі не потрібен, тобто просто збільшуємо / зменшуємо ціфірькі для всіх задовольняють умові
Re: phpMyAdmin 2.7
Re: phpMyAdmin 2.7
> SELECT MAX (id) FROM table WHERE parrent_id == x
вбивати треба розумників, які намагаються займатися обчисленнями авто-інкрементних полів! я вже зае. я розгрібати лайно після студентів, наклепаного всякі "select * from record where id =: some_id-3"