Relate groups among Researchers with at least 2 common areas in MYSQL

Asked

Viewed 73 times

2

inserir a descrição da imagem aqui

I need to group all Researcher-type users (idUsuarioType = 3) who have 2 areas in common (idAreaAtuation)

Example: Maria, Pedro, José and Roberto have the areas Environment and Ecology in common.

Examples 2: João, Maurício and Fernando have the areas Renewable Energy and Environment in common.

For example3: Elisa and Leonora have the areas Programming and Fluid Mechanics in common.

Some attempts I made:

SELECT d.idAreaAtuacao, a.*
FROM (((usuarios_cadastro as a
INNER JOIN relacao_area_usuario as b ON b.idUsuarioCadastro=a.idUsuarioCadastro)
INNER JOIN relacao_atuacao_grande_area as c ON c.idRelacaoAtuacaoGrandeArea=b.idRelacaoAtuacaoGrandeArea)
INNER JOIN (SELECT idAreaAtuacao, COUNT(*)
FROM relacao_atuacao_grande_area 
GROUP BY idAreaAtuacao
HAVING COUNT(*) = 2) as d ON  c.idAreaAtuacao=d.idAreaAtuacao);

As shown above I tried to do the repetition count of the areas first, but I can’t see how I can filter users to separate them by common areas. From that I tried the following:

SELECT e.idUsuarioCadastro FROM relacao_area_usuario AS e
INNER JOIN relacao_atuacao_grande_area AS f ON e.idRelacaoAtuacaoGrandeArea = f.idRelacaoAtuacaoGrandeArea
WHERE f.idAreaAtuacao = 15 AND (((SELECT group_concat(a.idUsuarioCadastro) FROM relacao_area_usuario AS a
INNER JOIN relacao_atuacao_grande_area AS b ON a.idRelacaoAtuacaoGrandeArea = b.idRelacaoAtuacaoGrandeArea
WHERE idAreaAtuacao = 12) = (SELECT group_concat(c.idUsuarioCadastro) FROM relacao_area_usuario AS c
INNER JOIN relacao_atuacao_grande_area AS d ON c.idRelacaoAtuacaoGrandeArea = d.idRelacaoAtuacaoGrandeArea
WHERE idAreaAtuacao = 39)) IS NOT NULL)

The idea was to make comparisons between two groups of idUsuarioCartiro and the part of idAreaAtuation would be compared in a while structure (and this structure would need to compare each id value with all other id and so on) that I could not do.

Please help me, I’ve been trying to figure it out for weeks and I can’t :/

FOLLOWS THE BANK

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;


-- Copiando estrutura do banco de dados para dig_busqueaqui
CREATE DATABASE IF NOT EXISTS `dig_busqueaqui` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `dig_busqueaqui`;

-- Copiando estrutura para tabela dig_busqueaqui.areas_atuacao
CREATE TABLE IF NOT EXISTS `areas_atuacao` (
  `idAreaAtuacao` int(11) NOT NULL AUTO_INCREMENT,
  `nomeAreaAtuacao` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descricao` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `idAreaGrande` int(11) NOT NULL,
  PRIMARY KEY (`idAreaAtuacao`),
  UNIQUE KEY `idAreaAtuacao_UNIQUE` (`idAreaAtuacao`),
  KEY `idAreaGrandeAreaAtuacao_idx` (`idAreaGrande`),
  CONSTRAINT `idAreaGrande` FOREIGN KEY (`idAreaGrande`) REFERENCES `areas_grandes` (`idAreaGrande`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.areas_atuacao: ~23 rows (aproximadamente)
/*!40000 ALTER TABLE `areas_atuacao` DISABLE KEYS */;
INSERT INTO `areas_atuacao` (`idAreaAtuacao`, `nomeAreaAtuacao`, `descricao`, `idAreaGrande`) VALUES
    (1, 'Instrumentação Eletrônica', NULL, 1),
    (2, 'Circuitos Eletrônicos', NULL, 1),
    (3, 'Materiais e Componentes Semicondutores', NULL, 1),
    (4, 'Interdisciplinar', NULL, 1),
    (5, 'Redes Neuronais Artificiais', NULL, 10),
    (6, 'Gestão Ambiental', NULL, 6),
    (7, 'Inteligência Artificial', NULL, 10),
    (8, 'Dispositivos Optoeletrônicos', NULL, 1),
    (9, 'Química dos Alimentos', NULL, 8),
    (11, 'Desenvolvimento de Produto', NULL, 9),
    (15, 'Tecnologia de Bebidas', NULL, 5),
    (17, 'Física dos Alimentos', NULL, 5),
    (18, 'Físico-Química dos Alimentos', NULL, 5),
    (19, 'Bioquímica dos Alimentos', NULL, 5),
    (20, 'Bioquímica das Mat-primas Alimentares', NULL, 5),
    (21, 'Inovação Tecnológica', NULL, 5),
    (23, 'Engenharia de Software', NULL, 12),
    (24, 'Gestão de Projetos', NULL, 12),
    (25, 'Banco de Dados', NULL, 12),
    (26, 'Educação a Distância (EaD)', NULL, 12),
    (34, 'Metodologias Ágeis de Desenvolvimento de Software', NULL, 12),
    (38, 'Garantia de Controle de Qualidade', NULL, 6),
    (39, 'Fontes Renováveis de Energia', NULL, 7);
/*!40000 ALTER TABLE `areas_atuacao` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.areas_grandes
CREATE TABLE IF NOT EXISTS `areas_grandes` (
  `idAreaGrande` int(11) NOT NULL AUTO_INCREMENT,
  `nomeAreaGrande` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descricao` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`idAreaGrande`),
  UNIQUE KEY `idGrandeArea_UNIQUE` (`idAreaGrande`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.areas_grandes: ~12 rows (aproximadamente)
/*!40000 ALTER TABLE `areas_grandes` DISABLE KEYS */;
INSERT INTO `areas_grandes` (`idAreaGrande`, `nomeAreaGrande`, `descricao`) VALUES
    (1, 'Engenharia Elétrica', NULL),
    (2, 'Engenharia de Alimentos', NULL),
    (3, 'Engenharia Química', NULL),
    (4, 'Engenharia Civil', NULL),
    (5, 'Ciência e Tecnologia de Alimentos', NULL),
    (6, 'Engenharia de Produção', NULL),
    (7, 'Engenharia de Energia', NULL),
    (8, 'Engenharia Química', NULL),
    (9, 'Engenharia de Produto', NULL),
    (10, 'Engenharia da Computação', NULL),
    (11, 'Agronomia', NULL),
    (12, 'Ciência da Computação', NULL);
/*!40000 ALTER TABLE `areas_grandes` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.cadastro_gargalos
CREATE TABLE IF NOT EXISTS `cadastro_gargalos` (
  `idCadastroGargalo` int(11) NOT NULL AUTO_INCREMENT,
  `idUsuarioCadastro` int(11) NOT NULL,
  `dataCadastro` timestamp NOT NULL DEFAULT current_timestamp(),
  `gargalo` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `dispostoInvestir` bit(1) NOT NULL,
  PRIMARY KEY (`idCadastroGargalo`),
  UNIQUE KEY `idGargaloCadastro_UNIQUE` (`idCadastroGargalo`),
  KEY `idUsuarioCadastroGargalo_idx` (`idUsuarioCadastro`),
  CONSTRAINT `idUsuarioCadastroGargalo` FOREIGN KEY (`idUsuarioCadastro`) REFERENCES `usuarios_cadastro` (`idUsuarioCadastro`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.cadastro_gargalos: ~3 rows (aproximadamente)
/*!40000 ALTER TABLE `cadastro_gargalos` DISABLE KEYS */;
INSERT INTO `cadastro_gargalos` (`idCadastroGargalo`, `idUsuarioCadastro`, `dataCadastro`, `gargalo`, `dispostoInvestir`) VALUES
    (1, 1, '2020-09-03 00:45:47', 'Problema na medicao do tempo de pega do gesso', b'1'),
    (2, 6, '2020-09-05 11:44:42', 'Leitura de Tags RFID', b'0'),
    (3, 7, '2020-09-05 12:24:40', 'Problema em criar um novo produto', b'0');
/*!40000 ALTER TABLE `cadastro_gargalos` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.cadastro_palavras_chave
CREATE TABLE IF NOT EXISTS `cadastro_palavras_chave` (
  `idCadastroPalavraChave` int(11) NOT NULL AUTO_INCREMENT,
  `dataCadastro` timestamp NOT NULL DEFAULT current_timestamp(),
  `palavraChave` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`idCadastroPalavraChave`),
  UNIQUE KEY `idPalavraChave_UNIQUE` (`idCadastroPalavraChave`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.cadastro_palavras_chave: ~10 rows (aproximadamente)
/*!40000 ALTER TABLE `cadastro_palavras_chave` DISABLE KEYS */;
INSERT INTO `cadastro_palavras_chave` (`idCadastroPalavraChave`, `dataCadastro`, `palavraChave`) VALUES
    (5, '2020-09-05 12:07:29', 'RFID'),
    (6, '2020-09-05 12:07:29', 'Rastreabilidade'),
    (7, '2020-09-05 12:07:29', 'Tempo de Pega'),
    (8, '2020-09-05 12:07:29', 'Gesso'),
    (9, '2020-09-05 12:07:29', 'Medição Automática'),
    (10, '2020-09-05 12:07:29', 'Controle de Qualidade'),
    (11, '2020-09-05 12:07:29', 'Sementes'),
    (12, '2020-09-05 12:33:25', 'Notícias'),
    (13, '2020-09-05 12:33:25', 'Dashboard'),
    (14, '2020-09-05 12:33:25', 'Clippings');
/*!40000 ALTER TABLE `cadastro_palavras_chave` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.cadastro_tipos
CREATE TABLE IF NOT EXISTS `cadastro_tipos` (
  `idCadastroTipo` int(11) NOT NULL AUTO_INCREMENT,
  `idUsuarioTipo` int(11) NOT NULL,
  `nome` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descricao` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`idCadastroTipo`),
  UNIQUE KEY `idTipoCadastro_UNIQUE` (`idCadastroTipo`),
  KEY `idUsuarioTipo_idx` (`idUsuarioTipo`),
  CONSTRAINT `idUsuarioTipoCadTip` FOREIGN KEY (`idUsuarioTipo`) REFERENCES `usuario_tipos` (`idUsuarioTipo`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.cadastro_tipos: ~4 rows (aproximadamente)
/*!40000 ALTER TABLE `cadastro_tipos` DISABLE KEYS */;
INSERT INTO `cadastro_tipos` (`idCadastroTipo`, `idUsuarioTipo`, `nome`, `descricao`) VALUES
    (1, 3, 'Empresa', 'Nome da empresa que representa'),
    (2, 3, 'Microempreendedor Individual (MEI)', NULL),
    (3, 4, 'ICT', 'Nome da institução que representa'),
    (4, 4, 'Pesquisador Independente', NULL);
/*!40000 ALTER TABLE `cadastro_tipos` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.relacao_area_gargalo
CREATE TABLE IF NOT EXISTS `relacao_area_gargalo` (
  `idRelacaoAreaGargalo` int(11) NOT NULL AUTO_INCREMENT,
  `idAreaAtuacao` int(11) NOT NULL,
  `idCadastroGargalo` int(11) NOT NULL,
  `dataCadastro` timestamp NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`idRelacaoAreaGargalo`),
  UNIQUE KEY `idRelacaoAreaGargalo_UNIQUE` (`idRelacaoAreaGargalo`),
  KEY `idAreaAtuacaoRelAreGar_idx` (`idAreaAtuacao`),
  KEY `idCadastroGargaloRelAreGar_idx` (`idCadastroGargalo`)
) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=latin1;

-- Copiando dados para a tabela dig_busqueaqui.relacao_area_gargalo: 15 rows
/*!40000 ALTER TABLE `relacao_area_gargalo` DISABLE KEYS */;
INSERT INTO `relacao_area_gargalo` (`idRelacaoAreaGargalo`, `idAreaAtuacao`, `idCadastroGargalo`, `dataCadastro`) VALUES
    (1, 1, 1, '2020-09-03 00:56:36'),
    (2, 8, 1, '2020-09-03 00:56:36'),
    (3, 1, 2, '2020-09-05 11:47:21'),
    (4, 21, 2, '2020-09-05 11:47:21'),
    (5, 38, 2, '2020-09-05 11:47:21'),
    (8, 11, 2, '2020-09-05 12:01:55'),
    (9, 25, 2, '2020-09-05 12:01:55'),
    (10, 21, 1, '2020-09-05 12:19:02'),
    (11, 25, 1, '2020-09-05 12:19:02'),
    (12, 3, 1, '2020-09-05 12:19:45'),
    (14, 5, 1, '2020-09-05 12:19:45'),
    (15, 23, 3, '2020-09-05 12:36:58'),
    (16, 25, 3, '2020-09-05 12:36:58'),
    (17, 11, 3, '2020-09-05 12:36:58'),
    (18, 24, 3, '2020-09-05 12:36:58');
/*!40000 ALTER TABLE `relacao_area_gargalo` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.relacao_area_usuario
CREATE TABLE IF NOT EXISTS `relacao_area_usuario` (
  `idRelacaoAreaUsuario` int(11) NOT NULL AUTO_INCREMENT,
  `idRelacaoAtuacaoGrandeArea` int(11) NOT NULL,
  `idUsuarioCadastro` int(11) NOT NULL,
  `dataCadastro` timestamp NOT NULL DEFAULT current_timestamp(),
  `relacaoAtiva` tinyint(4) NOT NULL DEFAULT 1,
  PRIMARY KEY (`idRelacaoAreaUsuario`),
  UNIQUE KEY `idRelacaoAreaUsuario_UNIQUE` (`idRelacaoAreaUsuario`),
  KEY `idUsuarioCadastroRelAreUsu_idx` (`idUsuarioCadastro`),
  KEY `idAreaAtuacaoRelAreUsu_idx` (`idRelacaoAtuacaoGrandeArea`),
  CONSTRAINT `idRelacaoAtuacaoGrandeAreaRelAreUsu` FOREIGN KEY (`idRelacaoAtuacaoGrandeArea`) REFERENCES `relacao_atuacao_grande_area` (`idRelacaoAtuacaoGrandeArea`),
  CONSTRAINT `idUsuarioCadastroRelAreUsu` FOREIGN KEY (`idUsuarioCadastro`) REFERENCES `usuarios_cadastro` (`idUsuarioCadastro`)
) ENGINE=InnoDB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.relacao_area_usuario: ~28 rows (aproximadamente)
/*!40000 ALTER TABLE `relacao_area_usuario` DISABLE KEYS */;
INSERT INTO `relacao_area_usuario` (`idRelacaoAreaUsuario`, `idRelacaoAtuacaoGrandeArea`, `idUsuarioCadastro`, `dataCadastro`, `relacaoAtiva`) VALUES
    (11, 17, 2, '2020-09-03 17:22:27', 1),
    (12, 4, 5, '2020-09-03 17:22:27', 1),
    (13, 19, 5, '2020-09-03 17:22:27', 1),
    (14, 6, 2, '2020-09-03 17:22:27', 1),
    (15, 21, 3, '2020-09-03 17:22:27', 1),
    (16, 23, 3, '2020-09-03 17:22:27', 1),
    (17, 18, 3, '2020-09-03 17:22:27', 1),
    (18, 9, 3, '2020-09-03 17:22:27', 1),
    (19, 13, 3, '2020-09-03 17:22:27', 1),
    (20, 12, 3, '2020-09-03 17:22:27', 1),
    (21, 5, 3, '2020-09-03 17:22:27', 1),
    (22, 22, 4, '2020-09-03 17:22:27', 1),
    (23, 24, 4, '2020-09-03 17:22:27', 1),
    (24, 10, 4, '2020-09-03 17:22:27', 1),
    (25, 11, 4, '2020-09-03 17:22:27', 1),
    (26, 3, 4, '2020-09-03 17:22:27', 1),
    (27, 2, 4, '2020-09-03 17:22:27', 1),
    (28, 16, 5, '2020-09-03 17:22:27', 1),
    (29, 8, 5, '2020-09-03 17:22:27', 1),
    (30, 14, 5, '2020-09-03 17:22:27', 1),
    (31, 1, 5, '2020-09-03 17:22:27', 1),
    (32, 7, 5, '2020-09-03 17:22:27', 1),
    (33, 20, 5, '2020-09-03 17:22:27', 1),
    (34, 15, 4, '2020-09-04 19:27:56', 1),
    (35, 50, 3, '2020-09-04 19:33:15', 1),
    (36, 51, 4, '2020-09-04 19:36:37', 1),
    (40, 58, 3, '2021-01-14 12:39:34', 1),
    (41, 5, 6, '2021-01-14 15:10:23', 1),
    (42, 58, 6, '2021-01-14 15:12:18', 1),
    (43, 55, 6, '2021-01-18 16:13:38', 1);
/*!40000 ALTER TABLE `relacao_area_usuario` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.relacao_atuacao_grande_area
CREATE TABLE IF NOT EXISTS `relacao_atuacao_grande_area` (
  `idRelacaoAtuacaoGrandeArea` int(11) NOT NULL AUTO_INCREMENT,
  `idAreaAtuacao` int(11) NOT NULL,
  `idAreaGrande` int(11) NOT NULL,
  PRIMARY KEY (`idRelacaoAtuacaoGrandeArea`),
  UNIQUE KEY `idRelacaoAtuacaoGrandeArea_UNIQUE` (`idRelacaoAtuacaoGrandeArea`),
  KEY `idAreaAtuacaoRelAtuGraAre_idx` (`idAreaAtuacao`),
  KEY `idAreaGrandeRelAtuGraAre_idx` (`idAreaGrande`),
  CONSTRAINT `idAreaAtuacaoRelAtuGraAre` FOREIGN KEY (`idAreaAtuacao`) REFERENCES `areas_atuacao` (`idAreaAtuacao`),
  CONSTRAINT `idAreaGrandeRelAtuGraAre` FOREIGN KEY (`idAreaGrande`) REFERENCES `areas_grandes` (`idAreaGrande`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.relacao_atuacao_grande_area: ~27 rows (aproximadamente)
/*!40000 ALTER TABLE `relacao_atuacao_grande_area` DISABLE KEYS */;
INSERT INTO `relacao_atuacao_grande_area` (`idRelacaoAtuacaoGrandeArea`, `idAreaAtuacao`, `idAreaGrande`) VALUES
    (1, 25, 12),
    (2, 20, 5),
    (3, 19, 5),
    (4, 2, 1),
    (5, 11, 9),
    (6, 8, 1),
    (7, 26, 12),
    (8, 23, 12),
    (9, 39, 7),
    (10, 17, 5),
    (11, 18, 5),
    (12, 38, 6),
    (13, 6, 6),
    (14, 24, 12),
    (15, 21, 5),
    (16, 21, 12),
    (17, 1, 1),
    (18, 7, 10),
    (19, 4, 1),
    (20, 34, 12),
    (21, 9, 8),
    (22, 9, 5),
    (23, 5, 10),
    (24, 15, 5),
    (50, 4, 8),
    (51, 4, 5),
    (55, 39, 11),
    (58, 21, 11);
/*!40000 ALTER TABLE `relacao_atuacao_grande_area` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.relacao_palavras_gargalos
CREATE TABLE IF NOT EXISTS `relacao_palavras_gargalos` (
  `idRelacaoPalavraGargalo` int(11) NOT NULL AUTO_INCREMENT,
  `idCadastroPalavraChave` int(11) NOT NULL,
  `idCadastroGargalo` int(11) NOT NULL,
  PRIMARY KEY (`idRelacaoPalavraGargalo`),
  UNIQUE KEY `idRelacaoPalavraGargalo_UNIQUE` (`idRelacaoPalavraGargalo`),
  KEY `idCadastroPalavraChaveRelPalGar_idx` (`idCadastroPalavraChave`),
  KEY `idCadastroGargaloRelPalGar_idx` (`idCadastroGargalo`),
  CONSTRAINT `idCadastroGargaloRelPalGar` FOREIGN KEY (`idCadastroGargalo`) REFERENCES `cadastro_gargalos` (`idCadastroGargalo`),
  CONSTRAINT `idCadastroPalavraChaveRelPalGar` FOREIGN KEY (`idCadastroPalavraChave`) REFERENCES `cadastro_palavras_chave` (`idCadastroPalavraChave`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.relacao_palavras_gargalos: ~13 rows (aproximadamente)
/*!40000 ALTER TABLE `relacao_palavras_gargalos` DISABLE KEYS */;
INSERT INTO `relacao_palavras_gargalos` (`idRelacaoPalavraGargalo`, `idCadastroPalavraChave`, `idCadastroGargalo`) VALUES
    (9, 5, 2),
    (10, 6, 2),
    (11, 7, 1),
    (12, 8, 1),
    (13, 9, 1),
    (14, 10, 1),
    (15, 11, 2),
    (16, 10, 2),
    (17, 12, 3),
    (18, 13, 3),
    (19, 14, 3),
    (20, 6, 1),
    (21, 5, 1);
/*!40000 ALTER TABLE `relacao_palavras_gargalos` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.usuarios_cadastro
CREATE TABLE IF NOT EXISTS `usuarios_cadastro` (
  `idUsuarioCadastro` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `idUsuarioTipo` int(11) NOT NULL,
  `idCadastroTipo` int(11) DEFAULT NULL,
  `telefone` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `email` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `dataCadastro` timestamp NOT NULL DEFAULT current_timestamp(),
  `nomeEntidade` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `tipoVinculo` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`idUsuarioCadastro`),
  UNIQUE KEY `idCadastroUsuario_UNIQUE` (`idUsuarioCadastro`),
  KEY `idCadastroTipoCadastro_idx` (`idCadastroTipo`),
  KEY `idUsuarioTipoCadastro_idx` (`idUsuarioTipo`),
  CONSTRAINT `idCadastroTipoCadastro` FOREIGN KEY (`idCadastroTipo`) REFERENCES `cadastro_tipos` (`idCadastroTipo`),
  CONSTRAINT `idUsuarioTipoCadastro` FOREIGN KEY (`idUsuarioTipo`) REFERENCES `usuario_tipos` (`idUsuarioTipo`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.usuarios_cadastro: ~7 rows (aproximadamente)
/*!40000 ALTER TABLE `usuarios_cadastro` DISABLE KEYS */;
INSERT INTO `usuarios_cadastro` (`idUsuarioCadastro`, `nome`, `idUsuarioTipo`, `idCadastroTipo`, `telefone`, `email`, `dataCadastro`, `nomeEntidade`, `tipoVinculo`) VALUES
    (1, 'Igo Silva', 3, 1, '074991413673', '[email protected]', '2020-09-03 00:44:19', 'WebGO Technologies', 'Diretor'),
    (2, 'Isnaldo Coelho', 4, 3, '07421027630', '[email protected]', '2020-09-03 00:44:19', 'UNIVASF', 'Professor Assistente II'),
    (3, 'Vivianni Marques', 4, 3, '07436141937', '[email protected]', '2020-09-03 11:46:31', 'UNIVASF', 'Professora Assistente II'),
    (4, 'Marcos Lima', 4, 3, '08721014300', '[email protected]', '2020-09-03 17:08:30', 'IF Sertão PE', 'Professor efetivo'),
    (5, 'Mário Godoy', 4, 3, '07421027636', '[email protected]', '2020-09-03 17:08:30', 'UNIVASF', 'Professor Assistente II'),
    (6, 'Tiago Silva', 3, 2, '074988585787', '[email protected]', '2020-09-05 11:26:47', NULL, NULL),
    (7, 'Diego Alves', 3, 2, '074988141516', '[email protected]', '2020-09-05 12:22:26', NULL, NULL);
/*!40000 ALTER TABLE `usuarios_cadastro` ENABLE KEYS */;

-- Copiando estrutura para tabela dig_busqueaqui.usuario_tipos
CREATE TABLE IF NOT EXISTS `usuario_tipos` (
  `idUsuarioTipo` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
  `descricao` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`idUsuarioTipo`),
  UNIQUE KEY `idtipoUsuario_UNIQUE` (`idUsuarioTipo`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Copiando dados para a tabela dig_busqueaqui.usuario_tipos: ~4 rows (aproximadamente)
/*!40000 ALTER TABLE `usuario_tipos` DISABLE KEYS */;
INSERT INTO `usuario_tipos` (`idUsuarioTipo`, `nome`, `descricao`) VALUES
    (1, 'Administrador', NULL),
    (2, 'Visitante', NULL),
    (3, 'Empresário', NULL),
    (4, 'Pesquisador', NULL);
/*!40000 ALTER TABLE `usuario_tipos` ENABLE KEYS */;

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  • 2

    and what have you tried? can you put the query in the question?

  • I’ll add what I tried, but I always arrive at solutions by half, I’m new here

  • 1

    Instead of the diagram image it is better to post the definition of your tables. See Manual on how NOT to ask questions

  • 1

    which version of Mysql you are using?

  • @Imex Mysql version is 8.0

  • @anonymo you speak the code of the tables?

  • @Ricardopunctual I added the Query

  • 1

    need to explain better what it would be "I need to group all Researcher-type users (idUsuarioType = 3) who have 2 areas in common (idAreaAtuation)" Can you put an example of the expected result in the question? I took your code and put n db-fiddle to help here: https://www.db-fiddle.com/f/vkxX3U7ct7rYbgPUBGwdnL/0 You see that I made some queries, filtering the grouped by repetition to get an idea of the data

  • @Thank you very much!!!

  • @Ricardopunctual thank you very much for the attention and attempts, imex managed to show me how it does, thank you so much for showing me this test site, did not know

Show 5 more comments

1 answer

2


I did not test, I may have some errors, but follow a suggestion for tests:

with CTE_UsuarioAreas as
(
    select
        ra1.idAreaAtuacao as idAreaAtuacao1,
        ra2.idAreaAtuacao as idAreaAtuacao2,
        u.idUsuarioCadastro,
        count(*) over(partition by ra1.idAreaAtuacao, ra2.idAreaAtuacao) as QtdeUsuarios
    from usuarios_cadastro as u

    inner join relacao_area_usuario as ru1 
        on u.idUsuarioCadastro = ru1.idUsuarioCadastro
    inner join relacao_atuacao_grande_area as ra1 
        on ru1.idRelacaoAtuacaoGrandeArea = ra1.idRelacaoAtuacaoGrandeArea

    inner join relacao_area_usuario as ru2 
        on u.idUsuarioCadastro = ru2.idUsuarioCadastro
    inner join relacao_atuacao_grande_area as ra2 
        on ru2.idRElacaoAtuacaoGrandeArea = ra2.idRelacaoAtuaaoGrandeArea

    where
        u.idUsuarioTipo = 3 and
        ra1.idAreaAtuacao < ra2.idAreaAtuacao
)

select 
    idAreaAtuacao1,
    idAreaAtuacao2,
    idUsuarioCadastro
from CTE_UsuarioAreas
where
    QtdeUsuarios > 1
order by
    idAreaAtuacao1,
    idAreaAtuacao2

I hope it helps

  • Thank you very much!!!!!!! thank you very much!! is exactly that!.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.