É 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 o ID da página atual, o ID da página anterior a atual, o número da página atual e qual opção foi escolhida na página anterior para que ela a tenha levado até a página atual. Eu pensei em algo assim:
for(int i = 0; i < numero_pagina; 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!