Ошибка SQL с использованием CTE

Я получаю эту ошибку:

Ошибка запроса: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса, используемого рядом с:; WITH convs AS (выберите c.id, c.title, c.seen, c.id_receiver, c.id_send 'в строке 1

когда я использую этот запрос:

$query = ";WITH convs AS ( select c.id, c.title, c.seen, c.id_receiver, c.id_sender from conversations c ) select id, title, seen, id_receiver, id_sender from convs where id_receiver = '5' order by title desc limit 0,25"; $res = mysqli_query($connection ,$query); 

Я что-то упускаю ? Ваша помощь будет высоко оценена.

PS: я минимизировал запрос, чтобы сделать его простым для этого контекста, если вы поможете мне найти решение, у меня может возникнуть другая проблема с полным запросом. Поэтому я могу вернуться к вам за дополнительной помощью. Заранее спасибо.

ИЗМЕНИТЬ (ЦЕЛЫЙ ВОПРОС)

 $query = "WITH convs AS ( select c.id, c.title, c.seen, c.id_receiver, c.id_sender, (select max(date) from messages where id_conversation = c.id and id_user <> '$iduser') as last_msg, (select top 1 id_user from messages where id_conversation = c.id and id_user <> '$iduser' order by date desc) as last_user, (select count(distinct id_user) from messages where id_conversation = c.id) as nbruser, (select count(*) from messages where id_conversation = c.id) as nbrmsg, (select username from users where id = c.id_sender) as sender, (select username from users where id = c.id_receiver) as receiver, (select count(*) from deleted_conversations where id_user='$iduser' and id_conversation=c.id) as deleted, from conversations c ) select id, title, seen, id_receiver, id_sender, receiver, sender, last_msg, last_user, deleted, nbruser, nbrmsg from convs where (id_receiver = '$iduser' or (id_sender == '$iduser' and nbruser > 1)) and deleted = 0 order by last_msg desc limit $pageLimit,$REC_PER_PAGE"; 

То, что подтолкнуло меня к использованию CTE, – это необходимость использования псевдонимов в where clause. И, как вы можете видеть, у меня их много.

Можете ли вы дать мне пример того, как использовать представления / временные таблицы для достижения моей цели?

CTE очень похожи на производные таблицы:

 select id, title, seen, id_receiver, id_sender, receiver, sender, last_msg, last_user, deleted, nbruser, nbrmsg FROM ( select c.id, c.title, c.seen, c.id_receiver, c.id_sender, (select max(date) from messages where id_conversation = c.id and id_user <> '$iduser') as last_msg, (select top 1 id_user from messages where id_conversation = c.id and id_user <> '$iduser' order by date desc) as last_user, (select count(distinct id_user) from messages where id_conversation = c.id) as nbruser, (select count(*) from messages where id_conversation = c.id) as nbrmsg, (select username from users where id = c.id_sender) as sender, (select username from users where id = c.id_receiver) as receiver, (select count(*) from deleted_conversations where id_user='$iduser' and id_conversation=c.id) as deleted, from conversations c ) as convs where (id_receiver = '$iduser' or (id_sender == '$iduser' and nbruser > 1)) and deleted = 0 order by last_msg desc limit $pageLimit,$REC_PER_PAGE 

MySQL / MariaDB не поддерживает CTE. Кроме того, в этом случае нет необходимости:

  select id, title, seen, id_receiver, id_sender from conversations c where id_receiver = '5' order by ?? desc limit 0, 25; по  select id, title, seen, id_receiver, id_sender from conversations c where id_receiver = '5' order by ?? desc limit 0, 25; 

Примечание. Вам также нужно указать столбец для order by .

Для более сложных примеров вы можете использовать подзапросы, представления и / или временные таблицы.