Algo así había pensado, pero no recuerdo dónde pregunté algo parecido y me recomendaron una solución que no implicaba tantas
queries (una para comprobar si hay un "child" de cada capítulo), mejorando la
performance.
A ver qué te parece esta idea, y si se podría afinar un poco:
Sacar TODOS los capítulos, ordenados por Parent, Order ASC:
Parent | Order | ID
0 | 1 | 1
0 | 2 | 2
0 | 3 | 5
2 | 1 | 3
2 | 2 | 4
No saldrían en el orden correcto, pero al menos tendríamos en un array todos los datos necesarios.
Al presentar los datos, seleccionar sólo los que interesan: En un primer foreach seleccionar sólo los que "$item['parent'] = 0", y para cada uno a su vez, uno en que compruebe su hay un "$item['parent'] = $item['ID'] (pero el primer Parent se refiere al del subcapítulo y el segundo al ID del item actual, no el del subcapítulo)
Código PHP:
foreach ($results as $item)
{
// Seleccionar solo los que tienen Parent = 0
if ($item['parent'] = 0)
{
echo $item['ID']; // Y mostrar el resto de la información de este capítulo...
// Repetir para subcapítulos cuyo 'parent' = $item['ID'], ¿¿¿con un while, con otro foreach???
// Y así sucesivamente (para cada uno comprobar si en el array hay alguno cuyo Parent coincida con el ID actual...
}
}