На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Поиск напарников по недостающим навыкам и наоборот.
    Блин. Сколько всего понаписано. И ни кто ничего не решает.
    Так и не понял. Недостающие навыки или по существующим навыкам?

    Добавлено
    Если записей в таблицах "не много", то подойдёт `group_concat` + `group_by`.
    Если записей много, то подойдёт первый вариант + временные таблицы.

    Добавлено
    ExpandedWrap disabled
      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 ;


    Добавлено
    Ещё септолетто поможет.

    Добавлено
    Ещё па-ра-це-то-мол:
    ExpandedWrap disabled
      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 ;
    Сообщение отредактировано: Tishaishii -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0201 ]   [ 15 queries used ]   [ Generated: 27.04.24, 10:12 GMT ]