Добрый день!
Имеется 3 таблицы MySQL:
1) pages:
id | template
1 | 1
2) templates:
id | value
1 | {{> header}} {{> content}} {{> footer}}
3) parts:
id | name | value
1 | header | <html><head><title>Заголовок</title></head><body>
2 | content | <main>...</main>
3 | footer | </body></html>
Пытаюсь получить в ответ строку в виде:
id | template
1 | <html><head><title>Заголовок</title></head><body><main>...</main></body></html>
Пришел к следующему виду запроса:
SELECT p.id, REPLACE(t.value, p2.name, p2.value) AS template
FROM `pages` AS p
LEFT JOIN `templates` AS t ON (t.id = p.template)
LEFT JOIN `parts` AS p2 ON (t.value LIKE CONCAT("%{{> ", p2.name, "}}%"))
WHERE
r.id = 1;
На выходе получаю:
id | template
1 | <html><head><title>Заголовок</title></head><body>{{> content}}{{> footer}}
1 | {{> header}}<main>...</main>{{> footer}}
1 | {{> header}}{{> content}}</body></html>
Насколько понимаю, данная ситуация вызвана некорректным сочетанием REPLACE и JOIN`а, т.к. если группировать результат по p.id, то в ответ приходит только 1 строка с корректно замененным только {{> header}}.
Буду рад помощи, наставлениям, подсказкам или решению.
Вложенный REPLACE вопрос не решает.
P.S. Заранее всем спасибо!)