Страница о генеалогическом дереве PHP MYSQL

Я строю генеалогическое древо. Таблица выглядит так:

id ------ имя ------ мать ------ отец ------- дети

это код для страницы с подробными сведениями о человеке:

$ query = mysql_query ("ВЫБРАТЬ family.id, family.firstname, mother.firstname AS mother, Father.firstname AS father, kids.firstname AS kids

ИЗ СЕМЬИ

ПРИСОЕДИНЯЙТЕСЬ к семье КАК мать НА mother.id = family.mother ПРИСОЕДИНЯЙТЕСЬ к семье КАК отец НА отец.id = family.father ПРИСОЕДИНЯЙТЕСЬ к семье КАК дети НА kids.id = family.kids

ГДЕ family.id = ". $ _ GET ['id']

$ row = mysql_fetch_array ($ query,) или умереть (mysql_error ());

          echo "First Name: ".$row['firstname']."<BR>";
          echo "Mother Name: ".$row['mother']."<BR>"; 
          echo "Father Name:  ".$row['father']."<BR>"; 
          echo "Kids: ".$row['kids']."<BR>";
          echo "<BR>";

результат:
Имя: XXXXX
Имя матери: ГГГГГ
Дети: AAAAAAA

Проблема в том, что когда одно из полей пусто (если у кого-то нет детей), скрипт останавливается. а я получаю только:

Имя:
Имя матери:
Дети:

Любое решение?


person user1740512    schedule 12.10.2012    source источник


Ответы (1)


Если поля не обязаны иметь значение, вы должны использовать LEFT JOIN вместо JOIN, хотя это может привести к довольно большой загрузке, в зависимости от вашего объема данных.

person Vapire    schedule 12.10.2012
comment
Спасибо, есть какие-нибудь решения, чтобы ускорить загрузку? - person user1740512; 12.10.2012
comment
Что ж, вы можете разделить его на несколько SQL-запросов и заранее проверить, есть ли что-то для выбора. Потом конечно индексы. А вот ссылка для оптимизации левого и правого соединений: dev .mysql.com / doc / refman / 5.0 / en / left-join-optimisation.html. - person Vapire; 12.10.2012