Ir para conteúdo

POWERED BY:

Arquivado

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

_rchaves_

select em auto-relacionamento

Recommended Posts

É o seguinte, possuo um sistema que é uma espécie de livro, nele, a tabela página possui auto-relacionamento, pois uma página leva à outra, porém é possível que uma página tenha dois caminhos diferentes, por exemplo, a página 3 pode levar a duas diferentes páginas 4, é um livro interativo.

Estou utilizando o MySQL e a tabela é mais ou menos assim:

create table Paginas(  
  id_pagina int primary key auto_increment not null, # Chave primária  
  id_livro int not null, # A qual livro pertence esta página  
  texto text not null, # Texto da página  
  numero_pagina smallint not null default 1, # Número da página, é possível que existam por exemplo duas páginas 3, ou até 8 páginas 4  
  op tinyint, # Qual opção foi escolhida na página anterior (1 ou 2) para que o usuário pudesse chegar nessa página  
  anterior int, # ID da página anterior à essa  
  foreign key(id_livro) references Livros(id_livro) on delete cascade,  
  foreign key(anterior) references Paginas(id_pagina) on delete cascade  
);  
Eu preciso agora fazer uma lista dos ids das páginas por onde ele passou para chegar até aqui, por exemplo, a página de ID 1 o levou até a de ID 2, que o levou até a de ID 4, agora eu preciso saber por onde ele passou para ter conseguido chegar até aqui, sendo que eu só tenho as informações da página atual. Eu pensei em algo assim:

int anterior = pagina_atual.getAnterior();
int numeroPagina = pagina_atual.getNumeroPagina();  
for(int i = 0; i < numeroPagina; i++){  
   pagina_atual = consultarPagina("SELECT * FROM Paginas WHERE id_pagina = "+anterior);  
   array.add(pagina_atual);  
   anterior = pagina_atual.getAnterior();  
}  
Mas isso executaria muitos selects, o que é um problema, principalmente num livro grande. Acredito que é possível resumir tudo isso a um único select, mas ainda não obtive sucesso, por favor, me ajudem!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que linguagem é essa ? Java ?

Se for toda página que o usuário estiver você guarda.

 

Manja ArrayList() ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim sim, o problema é que não quero ter q fazer dezenas de selects no banco, gostaria de resolver isso quem sabe com um select só, ou então criar uma função no MySQL pra selecionar todos esses itens que eu quero de uma vez só, preencher a arraylist sem ter q ir fazendo um novo select de resultado em resultado.

 

--- Edit ---

 

Ah sim, você quis dizer pra cada página que ele avançar eu guardar, assim não teria que fazer select nenhum, mas o problema é que quando ele fecha o programa, assim que ele volta estará marcado na página que ele estava, eu gostaria de não ter q fazer outra tabela apenas para guardar por quais páginas ele passou para chegar até a atual.

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.