Jump to content

arthursanno

Members
  • Content count

    5
  • Joined

  • Last visited

Community Reputation

0 Comum

About arthursanno

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. arthursanno

    MySQL pegar o primeiro registro sem 2 filhoa (parent)

    Entendi sim Matheus. Obrigado pela atenção, ajuda e a aula. Aprendi bastante, isso faz parte de um aprendizado que estou praticando.
  2. arthursanno

    MySQL pegar o primeiro registro sem 2 filhoa (parent)

    A inserção do novo registros será sempre no primeiro pai disponível. Ex: INSERT INTO `pool` (`id`, `idPai`, `nome`) VALUES (1, 0, 'José'), (2, 1, 'Maria'), (3, 1, 'Carlos'), (4, 2, 'Renta'), (5, 2, 'Pedro'), (6, 3, 'Gustavo'); Nesse caso o primeiro pai disponível é o 3 (Carlos), porque ele não possui 2 filhos (somente 1). Ao acrescentar mais um filho nele, o primeiro pai disponível é o 4 (Renata), cujo não possui nenhum filho, ao acrescentar mais um filho, Renata ainda será o primeiro pai disponível pois ainda não tem 2 filhos... INSERT INTO `pool` (`id`, `idPai`, `nome`) VALUES (1, 0, 'José'), (2, 1, 'Maria'), (3, 1, 'Carlos'), (4, 2, 'Renta'), (5, 2, 'Pedro'), (6, 3, 'Gustavo'), // Acrescentando novo filho em 3 pq ele só tem 1 filho é o primeiro pai disponível (7, 3, 'Igor'), // Acrescentando novo filho agora em 4, pq 3 já possui 3 filhos e 4 nenhum filho (8, 4, 'Jerry'), // Acrescentando novo filho, ainda em 4 pq 4 não possui 2 filhos (9, 4, 'Bárbara'), // Acrescentando novo filho, agora em 5 pq 4 já possui 2 filhos (10, 5, 'Rebeca'); ... Nessa query que montei, ele me retorna sempre o PRIMEIRO PAI DISPONÍVEL SELECT * FROM pool a WHERE a.id > (select idPai from pool ORDER BY idPai DESC LIMIT 1) OR a.id IN (SELECT idPai FROM pool WHERE id <> 1 GROUP BY idPai HAVING COUNT(*) < 2) ORDER BY id ASC LIMIT 1; Uso esse para pegar o ID do primeiro pai livre e adiciono automaticamente o novo registro nesse pai. http://www.sqlfiddle.com/#!9/67fdf2/1 Sim, estarei usando PHP.
  3. arthursanno

    MySQL pegar o primeiro registro sem 2 filhoa (parent)

    Olá Matheus. Obrigado por me responder. Eu havia construido essa consulta, verifique: SELECT * FROM pool a WHERE a.id NOT IN (select idPai from pool GROUP BY idPai ORDER BY idPai ASC) OR a.id IN (SELECT idPai FROM pool WHERE id <> 1 GROUP BY idPai HAVING COUNT(*) < 2); O resultado seria a lista dos pais sem filhos e do pai com 1 filho. Mas como a inserção é automática, ou seja, ele já faz a inserção no primeiro pai livre, então mudei para. SELECT * FROM pool a WHERE a.id > (select idPai from pool ORDER BY idPai DESC LIMIT 1) OR a.id IN (SELECT idPai FROM pool WHERE id <> 1 GROUP BY idPai HAVING COUNT(*) < 2) ORDER BY id ASC LIMIT 1; Me sugere algo?
  4. Possuo a seguinte tabela CREATE TABLE IF NOT EXISTS `pool` ( `id` int(11) NOT NULL AUTO_INCREMENT, `idPai` int(11) NOT NULL, `nome` varchar(100) NOT NULL, PRIMARY KEY (`idPool`) ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; INSERT INTO `pool` (`id`, `idPai`, `nome`) VALUES (1, 0, 'José'), (2, 1, 'Maria'), (3, 1, 'Carlos'), (4, 2, 'Renta'), (5, 2, 'Pedro'), (6, 3, 'Gustavo'); No caso desse diagrama: 1 :: 2 :::: 4 :::: 5 :: 3 :::: 6 Quero fazer uma consulta SQL nessa tabela cujo me retorne o primeiro registros que NÃO possui 2 filhos. (no caso do diagrama seria o registro 3... e ao acrescentar mais um filho de 3, a consulta ia retornar o registro 4 agora) Não sei se tenho que fazer consultas dentro de consultas. Preciso de orientação pra continuar o caminho do estudo.
  5. Usando PHP e MySQL, estou tentando elaborar um código de inserção Multi Nível Binário (máximo 2 filhos pra cada pai). A inserção é sem escolher o pai de forma manual. O código tem que localizar o primeiro registro que não possui 2 filhos e inserir o novo registro ali. O desenho final, será uma pirâmide multi nível de 2 em 2. Sou iniciante em PHP/MySQL e isso é parte de um estudo (curso), então necessito de apoio para: Saber por onde começar a montar essa lógica; Um exemplo de SQL para buscar e inserir nesse formato que descrevi. Obrigado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.