1)
Выбрать все записи.
Идти по ним в цикле foreach
Разбирать строку xfields с помощью explode или регулярки
2)
привести таблицу к третьей нормальной форме - вместо богомерзкого поля xfields завести нормальные поля price, ekonomia, итд и сортировать по ним.
upd
1) регулярка
/ekonomia\|(\d+)\|?/ui
2) на существующей структуре базы - задача
нормально не решается.
формально можно конечно написать запрос
select * from posts
order by substring(xfields,(locate('ekonomia|',xfields)+9),locate('||',xfields,locate('ekonomia|',xfields)+9)-(locate('ekonomia|',xfields)+9))
но это извращение которое будет адски медленно работать.
могу предложить добавить в структуру таблицы все таки отдельные поля и пропатчить код который их обновляет.