Mostrar criar tabela:
CREATE TABLE `a` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
CONSTRAINT `a_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `a` (`id`) ON DELETE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Selecione:
+----+---------+-----------+
| id | name | parent_id |
+----+---------+-----------+
| 1 | World | 1 |
| 2 | Europe | 1 |
| 3 | USA | 1 |
| 4 | France | 2 |
| 5 | Germany | 2 |
+----+---------+-----------+
Pergunta:
como defino melhor uma função que, passada id 4 como argumento, retorna:
"Mundo > Europa > França"
Esse "aninhamento" hierárquico por "parent_id" pode ser arbitrariamente profundo, não apenas 3 níveis de profundidade.
Não testado, apenas de cabeça. Para referência http://dev.mysql.com/doc/refman/5.5/en/create-procedure.html
Você pode usar a seguinte função para retornar a estrutura hierárquica para N no: de nós de folha como "Mundo > Europa > França > S1 > S2"
Tente
Agora, inspirado pelos ensinamentos de Phanindra cujos princípios tentei seguir, escrevi o que me parece um pouco "mais fácil para os olhos" reformulando sua resposta correta. Aqui para a posteridade. Agora a pergunta: foi realmente uma má ideia escrever uma função como esta, de acordo com os comentários? E se sim, por quê?