Просто чтобы убедиться, что я правильно понял: содержимое 2-го и 3-го уровня отображается динамически, основываясь на выбранных значениях из его родительской таблицы. Итак, в основном, вы хотите, чтобы пользователь выбрал что-то / несколько вещей в таблице 2-го уровня, а затем заставил его углубиться в детали на 3-м уровне?
На скриншоте вы отметили 1, 2 и т. Д. Вы хотите отобразить описание выбранного идентификатора из родительской таблицы?
Если это так, чтобы избежать другого оператора SELECT, вы можете использовать JOINS. Глядя на ваш код, вы можете использовать INNER JOIN. Чтобы дать вам пример SELECT третьего уровня, проверьте псевдокод ниже. Возможно, вы захотите отобразить историю классификации в виде URL (например, «abc / xyz» в качестве заголовка с опциями 3-го уровня ниже), поэтому вам также понадобится описание первого уровня. Если вы этого не сделаете, просто удалите соответствующие столбцы. Для интеграции с вашим PHP просто сравните с идентификатором выбранной вами опции.
SELECT a.id, a.description, b.id, b.foreign_key_firstlevel, b.description, c.id, c.foreign_key_secondlevel, c.description
FROM first_level_table AS a
INNER JOIN second_level_table AS b ON a.id = b.first_level_foreignkey
INNER JOIN third_level_table AS c ON b.id = c.second_level_foreignkey;
Еще одна вещь, которая приходит на ум: содержание уровня 1 - 3 довольно статично, так почему бы не использовать View? Конечно, это связано с ограничениями, но так как вы, кажется, выбираете только значения, это не должно вас беспокоить. Соединения требуют большого количества вычислений и замедляют ваши вычисления, если они сделаны чрезмерно. Вы можете обойти это, используя подготовленный вид. Поскольку я не знаю структуру вашей базы данных, псевдокод может выглядеть примерно так:
CREATE VIEW view_allselectoptions AS
SELECT a.id, a.description, b.id, b.foreign_key_firstlevel, b.description, c.id, c.foreign_key_secondlevel, c.description
FROM first_level_table AS a, second_level_table AS b, third_level_table AS c
WHERE a.id = b.foreign_key_firstlevel
AND b.id = c.foreign_key_secondlevel;
Вы также можете использовать JOINS в представлении. Код будет похож на приведенный выше.