Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.207.133.13] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Блин. Сколько всего понаписано. И ни кто ничего не решает.
Так и не понял. Недостающие навыки или по существующим навыкам? Добавлено Если записей в таблицах "не много", то подойдёт `group_concat` + `group_by`. Если записей много, то подойдёт первый вариант + временные таблицы. Добавлено CREATE TABLE `user`( `id` BIGINT UNSIGNED NOT null AUTO_INCREMENT COMMENT 'идентификатор' , PRIMARY KEY( `id` ) ) COMMENT 'пользователь' ; CREATE TABLE `skill`( `id` BIGINT UNSIGNED NOT null AUTO_INCREMENT COMMENT 'идентификатор' , PRIMARY KEY( `id` ) ) COMMENT 'навык' ; CREATE TABLE `user_skill`( `id_user` BIGINT UNSIGNED NOT null AUTO_INCREMENT COMMENT 'идентификатор пользователя' , `id_skill` BIGINT UNSIGNED NOT null AUTO_INCREMENT COMMENT 'идентификатор навыка' , PRIMARY KEY( `id_user` , `id_skill` ) ) COMMENT 'пользователь-навык' ; -- собственно, запрос: SELECT group_concat( DISTINCT `t1`.`id_user` ORDER BY 1 ASC ) AS `id_users` , `t1`.`id_skills` FROM ( SELECT `us1`.`id_user` , group_concat( DISTINCT `us1`.`id_skill` ORDER BY 1 ASC ) AS `id_skills` FROM `user_skill` AS `us1` GROUP BY 1 ) AS `t1` GROUP BY 2 ; Добавлено Ещё септолетто поможет. Добавлено Ещё па-ра-це-то-мол: SELECT `t1`.`id_skill` , `t1`.`skills` , group_concat( DISTINCT `t1`. `id_user` ) AS `id_users` FROM ( SELECT group_concat( DISTINCT `us1`.`id_skill` ORDER BY 1 ASC ) AS `skills` , `uns1`.`id_user` , `uns1`.`id_skill` FROM `user` AS `u1` INNER JOIN `user_skill` AS `us1` ON ( `u1`.`id` = `us1`.`id_user` ) LEFT OUTER JOIN `needed_skill` AS `uns1` ON ( `us1`.`id_skill` = `uns1`.`id_skill` ) WHERE ( `uns1`.`id_skill` IS null ) GROUP BY 1 , 2 ) AS `t1` GROUP BY 1 , 2 ; |