Ну правильно, вы же не указываете условие, по которому таблицы должны соединяться.
У вас должно быть условие, в котором упомянуты обе таблицы. Например u1.id=u2.id или что там нужно по бизнес-логике, про которую вы, разумеется ни слова не упомянули в своем вопросе.
Поэтому и в результатах чушь.
Даже если "не симфони единым" (хотя вопрос как бы конкретно про симфони), ответ все равно бесполезный. Потому что вы не понимаете, что делают константы JSON_UNESCAPED_* и приплели их совершенно не к месту.
Видно же, что здесь используется Symfony, с его сериализатором.
И при этом проблема не в самом JSON, а в кривой логике.
При чем здесь голый json_decode? При чем здесь JSON_UNESCAPED_?
Во-первых, так не надо делать. Статическим элементам нечего делать в параметрах.
А по уму надо вообще настроить default значения в базе и совсем выкинуть эти поля из запроса.
Во-вторых, нет смысла делать одноразовую переменную, весь массив можно писать прямо в функцию.
Давайте я вам отвечу на этот дурацкий вопрос, а вы сотрете свой идиотский ответ?
У вас выводится, потому что вы сортируете по кривой дате.
В order by надо писать исходную дату, а не отформатированную.
Не dateformat, а date.
И все прекрасно отсортируется.
Справедливости ради, про уникальность я дописал не сразу, а позже, когда обратил внимание на сам запрос.
Который, как оказалось, никакого отношения к "выполнению запросов MySQL к полю JSON" не имеет.