【发布时间】:2016-05-01 16:44:48
【问题描述】:
我收到此错误:
查询错误:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 ';WITH convs AS ( select c.id, c.title, c.seen, c.id_receiver, c.id_send' at line 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 子句中使用别名。正如你所看到的,我有很多。
你能举个例子说明如何使用视图/临时表来实现我的目的吗?
【问题讨论】:
-
我猜我们缺少 order by 子句。你直接写了 desc。
-
@I_am_Batman 在我的实际代码中,它存在,但仍然无法正常工作。我肯定只是在这里打错了(我编辑了问题)。
-
这仍然是您在 order by 之后没有给出列名来排序的错字吗?
-
MySQL 不支持 CTE。
标签: php mysql sql common-table-expression