Query - Associação, Chave Composta

Boa tarde amigos,

Estou com um problema simples, só que não consigo resolver…

eu tenho uma consulta no banco de dados que me mostra todas as bibliotecas cadastradas no sistema. só que essas bibliotecas possuem subdiretórios e eu estou com problemas ao associar os subdiretórios aos diretórios “pai”… abaixo segue as fotos e o banco.

Estou usando: MySQL + JDBC + JSP + SERVLET…

Aqui é o correto:

Aqui é o errado

Abaixo está a tabela do banco com as suas “inserções”.

                                                                    
--
-- Estrutura da tabela `biblioteca`
--

DROP TABLE IF EXISTS `biblioteca`;
CREATE TABLE IF NOT EXISTS `biblioteca` (
  `Codigo` int(3) NOT NULL AUTO_INCREMENT,
  `Nome` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `CodPai` int(3) DEFAULT NULL,
  PRIMARY KEY (`Codigo`),
  KEY `FKBiblioteca1` (`CodPai`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=27 ;

--
-- Extraindo dados da tabela `biblioteca`
--

INSERT INTO `biblioteca` (`Codigo`, `Nome`, `CodPai`) VALUES
(6, 'Cartilhas', NULL),
(7, 'Procedimentos Operacionais e Administrativos', NULL),
(8, 'Videos', NULL),
(9, 'Rio 2016 - Imagens', NULL),
(10, 'CONSETI', NULL),
(11, 'Formulários', NULL),
(12, 'Manuais de Equipamentos', NULL),
(13, 'ASSINF', 7),
(14, 'Contabilidade', 13),
(15, 'DAAD', 7),
(16, 'DAF', 7),
(17, 'DGAF', 7),
(18, 'DIVDOC', 7),
(19, 'DIVORÇ', 7),
(20, 'DIVPAT', 7),
(21, 'DRH', 7),
(22, 'SubGestão', 7),
(23, 'SUPEM', 7),
(24, 'Publicações Oficiais', NULL),
(25, 'RH', NULL),
(26, 'Viva Melhor', NULL);

Muito obrigado amigos, aguardo retorno.

:smiley:

Opa é disso que precisa:

SELECT b.Codigo as 'Codigo Pai', b.Nome as 'Nome Pai', a.Nome as 'Nome Filho' FROM biblioteca b LEFT JOIN biblioteca a ON (b.Codigo = a.CodPai);

Acredito que isso resolva seu problema! :wink:

[quote=jonatha.chaves]Opa é disso que precisa:

SELECT b.Codigo as 'Codigo Pai', b.Nome as 'Nome Pai', a.Nome as 'Nome Filho' FROM biblioteca b LEFT JOIN biblioteca a ON (b.Codigo = a.CodPai);

Acredito que isso resolva seu problema! :wink: [/quote]

Muito obrigado meu amigo, teu código me foi muito útil… abaixo vou mostrar como ficou…

Abaixo está o código:

public List<Biblioteca> findAll1() throws Exception {

		open();
		List<Biblioteca> listaBiblioteca = new ArrayList<Biblioteca>();
		stmt = con
				.prepareStatement("SELECT b.Codigo as 'Codigo_Pai', a.Codigo as 'Codigo_Filho', b.Nome as 'Nome_Pai', a.Nome as 'Nome_Filho' FROM biblioteca b LEFT JOIN biblioteca a ON (b.Codigo = a.CodPai)");
		rs = stmt.executeQuery();

		while (rs.next()) {

			Biblioteca b = new Biblioteca(rs.getInt("Codigo_Pai"), rs
					.getInt("Codigo_Filho"), rs.getString("Nome_Pai"), rs
					.getString("Nome_Filho"));

			listaBiblioteca.add(b);
		}

		close();
		return listaBiblioteca;
	}

	public static void main(String[] args) {

		BibliotecaDao bd = new BibliotecaDao();

		try {

			List<String> listaBibliotecaPai = new ArrayList<String>();
			List<String> listaBibliotecaFilho = new ArrayList<String>();

			for (Biblioteca b : bd.findAll1()) {

				if (!listaBibliotecaPai.contains(b.getNomePai())
						&& !listaBibliotecaFilho.contains(b.getNomeFilho())) {
					System.out.println(b.getNomePai());
				}

				listaBibliotecaPai.add(b.getNomePai());

				if (b.getNomeFilho() != null
						&& !listaBibliotecaFilho.contains(b.getNomeFilho())) {

					System.out.println("..." + b.getNomeFilho());
				}

				listaBibliotecaFilho.add(b.getNomeFilho());
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

Só tem um probleminha, ta vendo na imagem o Contabilidade, ele é filho de um filho… Não consegui desmembrar… tem alguma ideia ?

Obrigadoooooooooooo !! huhuuh me ajudou bastante.

:smiley:

Que bom que deu certo!

Agora para esta questão ai melhor saída é você implementar um método recursivo para varrer esta árvore devido ao fato de a hierarquia ser infinita.

[quote=jonatha.chaves]Que bom que deu certo!

Agora para esta questão ai melhor saída é você implementar um método recursivo para varrer esta árvore devido ao fato de a hierarquia ser infinita.[/quote]

Vou tentar aqui… só não sei fazer… kkkkk