Начну с простого запроса (кстати одна из возможностей DBSimple формирования древовидного результата, для подобной типовой операции):
$tree = $core->database->select("
SELECT
*,
id AS ARRAY_KEY,
parent AS PARENT_KEY
FROM ?_table
{ WHERE lang = ? }
ORDER BY `position`
", (empty(CURRENT_LANG)? $config["site"]["locale"] : CURRENT_LANG));
Спустя 60 сек.
вместо
$config["site"]["locale"] можно указать SKIP, который просто проигнорирует первую подстановку
Спустя 186 сек.
Усложним запрос:
$tree = $core->database->select("
SELECT
*,
id AS ARRAY_KEY,
parent AS PARENT_KEY
FROM ?_table
{
WHERE `lang` = ? { AND `tag` = ? }
}
ORDER BY `position`
",
(empty(CURRENT_LANG)? $config["site"]["locale"] : CURRENT_LANG),
(empty(TAG_VAR)? DBSIMPLE_SKIP : TAG_VAR)
);
Спустя 64 сек.
Вложенность таких критериев можно быть бесконечной, без макроподстановки это был бы пиздец.
Формировать каждый запрос с помощью условий, это был бы пиздец.