Я пытаюсь создать структуру для хранения и чтения пород собак с использованием php и mysql.Генеалогическое дерево mysql
я нашел на StackOverflow этот вид структуры, и, кажется, чтобы быть эффективным: Inbreeding-immune database structure
TABLE people (id, name, father_id, mother_id);
TABLE relatives (person_id, ancestor_id);
Существует рабочий пример здесь: http://sqlfiddle.com/#!2/0bd39/10
Можно получить просто упорядоченное дерево или поддерево (например, 4 или 5 поколений), начиная с идентификатора?
EDIT
Я пытаюсь получить данные с помощью первой таблицы ... но с 4-5 поколений в результате запроса очень и очень тяжелым. Я боюсь, что с большим количеством информации в БД, генеалогия может быть очень медленной и непригодной для использования.
SELECT
t1.name AS lev1, t2.name as f, ff1.name as ff1, fm1.name as fm1, t3.name as m,
mf1.name as mf1, mm1.name as mm1, .......
FROM people AS t1
LEFT JOIN people AS t2 ON t2.id = t1.father_id
LEFT JOIN people AS ff1 ON ff1.id = t2.father_id
LEFT JOIN people AS fm1 ON fm1.id = t2.mother_id
...
LEFT JOIN people AS t3 ON t3.id = t1.mother_id
LEFT JOIN people AS mf1 ON mf1.id = t3.father_id
LEFT JOIN people AS mm1 ON mm1.id = t3.mother_id
...
WHERE t1.id = 6;
Ваша проблема нелегко решить. Вы можете посмотреть (под лицензией Creative Commons) в моем родовом веб-приложении, но обратите внимание, что это бета-версия и немецкий (извините!). [link] (http://www.zujab.at/stm.zip) – idmean
Я знаю, что это непросто решить. И я пытаюсь найти какое-то предложение для лучшей структуры, используемой с ограничениями mysql. – Danilo
См. Мой ответ на http://stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tree/192462#192462 –