Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso ao menos de uma idéia.
Tenho uma tabela no meu banco de dados com duas colunas de IDs: Uma coluna de "pai" e outra de "filho". Os IDs correspondem a projetos, ou seja, podem exsitir projetos com subprojetos.
O segundo detalhe é que usuários estão cadastrados em alguns projetos.
Gostaria de um array da árvore de projetos em que o usuário está cadastrado. O maior problema é quando este está cadastrado no projeto "avô" e no "filho".
PS.: Algumas informaçãoes adicionais são: Tenho a tabela que já mencionei, uma tabela com os IDS de todos os projetos e outra com os IDs de usuários e os projetos que ele está cadastrado.
Além das perguntas feitas pelo Beraldo, também é necessário saber qual o seu banco de dados e se a dificuldade é na montagem do SELECT ou na exibição dos dados com PHP.
Carlos Eduardo
O banco de dados utilizado é o MySQL.
Não sei se uma montagem do SELECT diferente ajudaria, talvez.
Tenho tentado o seguinte:
Faço um SELECT para retornar um array com o projetos que o usuário está cadastrado:
SELECT p.id, p.name, ph.parent_id
FROM $t_project_table p
LEFT JOIN $t_project_user_list_table u
ON p.id=u.project_id AND u.user_id=$c_user_id
LEFT JOIN $t_project_hierarchy_table ph
ON ph.child_id = p.id
WHERE u.user_id='$c_user_id'
ORDER BY p.name
As variáveis PHP estão corretas, pois consigo ter o retorno do array dos IDs. Na linha "ph.child_id = p.id" porém pego apenas os projetos que estão na coluna "filho", ou seja, os que não estão nela, mas estão na coluno "pai" não aparecem no array.
Com isso eu tentei ler para cada ID do array verificar recursivamente o "pai" desse ID e o "pai" desse "pai" e assim vai.
Problema é que filhos de alguns desses pais podem estar no primeiro array. Ou algum desses pais podem ser filhos também.
O big problem é, por exemplo, quando tenho um projeto "Name x3" que é filho do "Name x2", que este é filho do "Name x1". Digamos que o usuário esteja cadastrado no Name x3. No array eu obtenho esse IDx3, mas tenho que imprimir uma lista <select> com as opções do caminho até o Name x3 com as opções dos seus pais desabilitadas.
Um exemplo complicado seria do tipo dessa árvore:
Name x1
Name x1.1 (cadastrado)
>> Name x1.1.1
>> Name x1.1.2
>> Name x1.1.3 (cadastrado)
Name x1.2
>> Name x1.1.1 (cadastrado)
>> Name x1.1.2 (cadastrado)
Idéias ou dúvidas? :huh:
Faltou você postar como tentou fazer (código completo), o que apareceu e o que deveria aparecer. De qualquer forma, pelo que entendi, seu problema tem relação com recursividade. Então, dê uma lida neste artigo, que pode ser que ajude em alguma coisa.
Carlos Eduardo
não entendi
dê um exemplo concreto.
mostre a estrutura da tabela, com dados hipotéticos.
Diga exatamente qual é o resultado esperado e o que você está obtendo atualmente