mysql_worm
Новичок
Выбор "последнего" из иерархической структуры
Добрый день. Столкнулся с проблемой которую по-человески не позволяет решить установленная у хостера версия MySQL, не поддерживающая вложенные запросы. Из-за этого уже приличную часть вещей пришлось реализовывать черти-как. Ну не об этом, суть проблемы: есть стандартная иерархия. id, parent_id, text, date
надо выбрать по parent_id одного последнего (по дате) потомка.
Когда родитель один и заранее известен, то это элементарно:
SELECT t.id, t.text
FROM table t
WHERE t.parent_id=16 /*например*/
ORDER BY t.date DESC
LIMIT 1
Но если ситуация вида:
SELECT child.id, child.text
FROM table parents JOIN table child
ON parents.id=child.parent_id
GROUP BY parents.id
ORDER BY child.date DESC
То ничего не получается
выбирает того потомка, который "выше" лежит в таблице.
Решение проблемы я вижу в том чтобы секцию ON изменить на что-то вида:
ON parents.id=child.parent_id AND child.id=(SELECT id FROM table WHERE parent_id=parents.id ORDER BY date DESC LIMIT 1)
но это не позволяет текущая версия MySQL (4.0.26)
Можно как-нибудь объехать БД на кривой кобыле не встраивая пост-обработку на уровне PHP?
Добрый день. Столкнулся с проблемой которую по-человески не позволяет решить установленная у хостера версия MySQL, не поддерживающая вложенные запросы. Из-за этого уже приличную часть вещей пришлось реализовывать черти-как. Ну не об этом, суть проблемы: есть стандартная иерархия. id, parent_id, text, date
надо выбрать по parent_id одного последнего (по дате) потомка.
Когда родитель один и заранее известен, то это элементарно:
SELECT t.id, t.text
FROM table t
WHERE t.parent_id=16 /*например*/
ORDER BY t.date DESC
LIMIT 1
Но если ситуация вида:
SELECT child.id, child.text
FROM table parents JOIN table child
ON parents.id=child.parent_id
GROUP BY parents.id
ORDER BY child.date DESC
То ничего не получается

Решение проблемы я вижу в том чтобы секцию ON изменить на что-то вида:
ON parents.id=child.parent_id AND child.id=(SELECT id FROM table WHERE parent_id=parents.id ORDER BY date DESC LIMIT 1)
но это не позволяет текущая версия MySQL (4.0.26)
Можно как-нибудь объехать БД на кривой кобыле не встраивая пост-обработку на уровне PHP?