один запрос к двум таблицам

krafty

new Exception
один запрос к двум таблицам

хочу одним запросом проверить данные в двух таблицах:
например есть таблицы users и admins. нужно сделать выборку для пользователя, который пытается авторизоваться. зараннее неизвестно, в какой таблице храниться его логин и пароль
 

Bambuk

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

А так - UNION
 

krafty

new Exception
можете объяснить преимущества одной таблицы пользователей?
ну одно я уже сам понял - легче писать код и нет заморочек с запросами типа как сейчас.
 

ForJest

- свежая кровь
krafty
1. Можно узнать всех пользователей системы одним запросом
2. Одним запросом проверяется доступ и определяется тип пользователя.
3. Можно легко менять права пользователей
------------------------
В целом - раздели сущности "пользовательский доступ" и "дополнительная информация о пользователе".
Т.е. сделай таблицу с
[sql]
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(32) NOT NULL default '',
`password` varchar(32) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
`type_of` enum('Admin', 'User', 'Customer') NOT NULL, PRIMARY KEY (`id`),
UNIQUE KEY `login` (`login`)
) TYPE=MyISAM AUTO_INCREMENT=818 ;
[/sql]
Здесь добавлен ещё email, т.к. он нужен для восстановления пароля.

-~{}~ 29.09.05 15:13:

Остальные таблицы сделай как
some_table(id_user, f1, f2, f3)
another_table(id_user, f1, f2, f3, f4,..., f10)
 

krafty

new Exception
у меня такие таблицы
[sql]
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(20) NOT NULL default '', `passw` varchar(40) NOT NULL default '', `group` int(11) NOT NULL default '0', `type_of` enum('Admin','User') NOT NULL default 'User', `name` varchar(60) NOT NULL default '', `email` varchar(100) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `login` (`login`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Пользователи';
CREATE TABLE `groups` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(25) NOT NULL default '',
`role` varchar(20) NOT NULL default '',
`link` varchar(100) NOT NULL default '',
`descr` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Группы';
CREATE TABLE `permissions` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(20) NOT NULL default '',
`link` varchar(100) default NULL,
`descr` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Права';
[/sql]

дело в том, что у админов будет пустое (точнее не такое как у остальных пользователей) поле group. а в таблице groups их вообще не будет

-~{}~ 29.09.05 15:42:

еще есть таблицп online

[sql]
CREATE TABLE `online` (
`login` varchar(30) NOT NULL default '',
`online_since` datetime NOT NULL default '0000-00-00 00:00:00',
`sid` varchar(65) NOT NULL default '',
UNIQUE KEY `login` (`login`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
[/sql]
 

ForJest

- свежая кровь
krafty
Значит делаешь в два запроса.
1. Вибираешь пользователя и, если нужно авторизуешь его
2. Если польователь есть, то выбираешь из _нужной_ таблицы данные.
 

krafty

new Exception
первый пункт мне не нужен.
спасибо за структуру таблицы users.
и вопросик еще: как работает AUTO_INCREMENT = 818; ?
 

ForJest

- свежая кровь
krafty
А. Это из дампа осталось. Ну он просто задаёт начальное значение для поля с AUTO_INCREMENT
(id` int( 11 ) NOT NULL AUTO_INCREMENT вот этого).
Т.е. нумерация начнётся не с 1 а с 818. Или 819 - точно не помню.
 

krafty

new Exception
ага понял. в дампе для новой таблицы AUTO_INCREMENT = 1; и нумерация тогда начинается с единицы
спасибо!
 
Сверху