Podivné chování MySQL při složitém CONCAT dotazu. Někdy vrací podivný nesmysl
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- j.salak
- Člen | 42
Zdravím, mám poměrně složitý dotaz, který vytváří JSON do jednoho sloupce. NEní to asi optimání, ale mám aplikaci takto nastavenou.
Nyní jsem se setkal s problémem, že do toho fieldu „page_slug“ to většinou načte hodnoty správně, ale někdy, přijde mi, že zcela náhodně mi to ten JSON zprasí. Např. přepíše jeho kus něčím jiným apod.
Poradíte? Díky, níže uvádím ten dotaz
SELECT p.page_id, (
SELECT REPLACE(CONCAT('{', CONCAT_WS(',', CONCAT('\'slug_id\':', QUOTE(COALESCE(json_0.slug_id,
'null'))), CONCAT('\'slug_published\':', QUOTE(COALESCE(json_0.slug_published, 'null'))),
CONCAT('\'slug_action\':', QUOTE(COALESCE(json_0.slug_action, 'null'))),
CONCAT('\'slug_parameters\':', COALESCE(json_0.slug_parameters, 'null')), CONCAT('\'slug_label\':',
QUOTE(COALESCE(json_1.slug_label, 'null'))), CONCAT('\'slug_title\':',
QUOTE(COALESCE(json_1.slug_title, 'null'))), CONCAT('\'slug_url\':', QUOTE(COALESCE(json_1.slug_url,
'null')))), '}'), '\'', '\"')
FROM slugs AS json_0
LEFT JOIN slugs_cs AS json_1 ON json_1.slug_id = json_0.slug_id
WHERE (json_0.removed IS NULL) AND (json_0.owner_table = 'CP\\\Repositories\\\PagesRepository') AND
(json_0.owner_id = p.page_id)
LIMIT 1) AS page_slug, l.page_title
FROM pages AS p
LEFT JOIN pages_cs AS l ON l.page_id = p.page_id
WHERE (p.client_id = 3) AND (p.removed IS NULL)
LIMIT 0, 20