Как правильно сделать запрос к таблице с под запросом на эту же таблицу с фильтром по полю?

Добрый день, сложно сформулировать запрос, попытаюсь подробнее описать

Есть таблица:
id; name ; placement
5 ; element01 ; placement01
4 ; element02 ; placement01
3 ; element03 ; placement01
2 ; element01 ; placement02
1 ; element02 ; placement03

На выходе нужно получить

id ; name ; new_placement ; old_placement
5 ; element01 ; placement01 ; placement02
4 ; element02 ; placement01 ; placement03
3 ; element03 ; placement01 ;
2 ; element01 ; placement01 ;
1 ; element02 ; placement03 ;

Т.е. как будто история перемещения, в разрезе каждой записи, где сейчас , и где было, отсортированное по id

Написал подобное, но ощущение что это дорогой вариант и неоптимальный

SELECT new_t.id, new_t.name, new_t.placement AS new_placement,
       (SELECT old_t.placement
		      FROM table old_t
		   	 WHERE old_t.name = new_t.name AND
			         old_t.id < new_t.id
			ORDER BY old_t.id DESC
			LIMIT 1) AS old_placement
  FROM table new_t
 ORDER BY new_t.id DESC
  • Вопрос задан
  • 25 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
по уму у вас структура таблицы должна быть сформирована сразу во втором виде, + дататайм изменения, ибо сортировать по айди не лучший вариант, там могут быть нюансы, это поле не для этого предназначено.

так же смотрите вот такой ответ или гуглите sql nested sets.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы