Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

tthsr

Buscar Pai e todos seus filhos a partir de um unico filho

Recommended Posts

Bom dia, tenho um sistema que possui as duas tabelas:

 

house (

int id,

varchar house_des ; }

 

e outra

 

house_son (

 

int id_house_son (fk para table_house, unique)
int id_house_father (fk para table_house) )

 

A questão é, pode se registrar várias casas, e casas podem ser casas afiliadas de casas pais, porém uma casa afiliada só pode ser afiliada a uma casa pai, e casa pai nao é afiliada de nenhuma outra casa; considerando na house:

 

Id | house description
1 Casa de Sagitário
2 Casa de Gêmeos
3 Casa de Urso
4 Casa de Aguia
5 Casa de Cérbero

6 Casa das Aguas

7 Casa de Agiotas
8 Casa de Exterminio

 

e na house_son

id_house_son | id_house_father

3 1
4 1

5 2
6 2
7 8

 

Teriamos a Casa de Gêmeos e Sagitários como principais, e a classe de Urso e Aguia como filhas de Sagitario e a de Cerbero e das Aguas como filha de Gemeos, e a de Exterminio como filial de de Agiotas

 

Até então eu efetuava uma busca que contemplava apenas uma busca pela casa pai, no caso:

 

SELECT house.id as idHouse, house.house_des as desHouse,
GROUP_CONCAT(
outro.house_des
ORDER BY outro.house_des ASC
SEPARATOR ', ') as desSons
FROM house h
left outer JOIN house_son son
ON h.id = son.id_house_father
left outer JOIN house outro
ON son.idt_id_house_son = outro.id
WHERE (h.id NOT IN (son.id_house_son))
AND
(h.house_des like "%sagi%" )
GROUP BY h.id
ORDER BY desHouse asc
e isso me retorna o resultado:

idHouse | desHouse | desSons
1 Casa de Sagitario Casa de Aguia, Casa de Urso
porém agora preciso buscar nao apenas pelas casas pais, mas pelas filiais também, e quando pesquisar por Casa de Aguia por exemplo, nao retornar apenas sua casa pai, mas sim sua casa Pai e todas filhas do Pai, ou seja, buscar por "ag" e ter como resultado:

idHouse | desHouse | desSons
1 Casa de Sagitario Casa de Aguia, Casa de Urso
2 Casa de Gemeos Casa das Aguas, Casa de Cerbero
7 Casa de Agiotas Casa de Exterminio
*negrito apenas para mostrar o que foi buscado
Alguma ideia ? Estou bem perdido nesse fluxo "reverso"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez fosse melhor uma só tabela com auto-relacionamento, MySql não tem que saiba connect by (ou algo semalhante), mas creio que existem formas de fazer queries hierarquicas, creio até já respondido por isto aqui.

 

 

 

Casa id,descricao,id_pai (fk casa.id)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.