Привет! Столкнулась с проблемой, не знаю, куда копать. Значит есть таблица пользователей и таблица групп. Один пользователь может принадлежать нескольким группам. Мне необходимо вывести определенное количество пользователей (для постраничного вывода). Структура таблицы пользователи: [sql] CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(50) NOT NULL, `pass` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; [/sql] Структура таблицы группы: [sql] CREATE TABLE IF NOT EXISTS `groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `description` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;[/sql] Структура таблицы, связывающей юзеров и группы: [sql] CREATE TABLE IF NOT EXISTS `groups_users` ( `user_id` int(11) NOT NULL, `group_id` int(11) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; [/sql] В результате выполнения запроса [sql] SELECT `users`.*, `groups`.`name` AS `g_name` FROM `users` LEFT JOIN `groups_users` ON `users`.`id`=`groups_users`.`user_id` LEFT JOIN `groups` ON `groups_users`.`group_id`=`groups`.`id` LIMIT 0,5 [/sql] получаю: Иными словами, 5 записей с учетом повторяющихся групп. Как перестроить запрос, чтоб получить количество записей для 5 пользователей, не зависимо от кого, в скольких группах они состоят (чтоб эти все группы были получены в запросе)? Надеюсь, понятно описала проблему
[sql]select t.id, login, pass, name as g_name from groups LEFT JOIN `groups_users` ON `groups_users`.`group_id`=`groups`.`id` JOIN (select id, login, pass from users limit 0, 5) as t ON t.`id`=`groups_users`.`user_id` [/sql]