MySQL - 子查询 - SQL 语法错误
Posted
技术标签:
【中文标题】MySQL - 子查询 - SQL 语法错误【英文标题】:MySQL - SubQuery - Error in your SQL Syntax 【发布时间】:2012-04-02 18:17:20 【问题描述】:我对 SQL 还是很陌生,所以我会尽量保持简单,我想做什么。
我有一个系统,我希望从中选择消息,首先从最近的开始,最多选择 5 条数据,然后在最后使用最新的“时间”列对它们进行排序正常显示。
这是我使用的语法:
SELECT * FROM messages WHERE sender = '$uid' AND reciever = '$new_user_id'
OR reciever = '$uid' AND sender = '$new_user_id' ORDER BY id ASC
FROM (SELECT * FROM messages ORDER BY time DESC)
这是我得到的错误:
您的 SQL 语法有错误;检查手册 对应于您的 mysql 服务器版本,以便使用正确的语法 靠近第 1 行的“FROM (SELECT * FROM messages ORDER BY time DESC)”
我知道我在这里弄错了,但由于 SQL 不是我真正的东西,我不知道该转向哪里。
一点点帮助就能成就大事业,我已经把头撞在墙上好几个小时了。
谢谢。
【问题讨论】:
可能是因为你定义了FROM
两次?
刚刚编辑它显然我似乎错过了第二个 FROM 之前的 ORDER BY。
您仍在使用两个FROM
语句。尝试将查询分解为子部分(正如我在回答中所做的那样),它可以帮助您更好地了解逻辑。 ;)
【参考方案1】:
试试这个:
SELECT *
FROM (SELECT * FROM messages ORDER BY time DESC LIMIT 5)
WHERE ( sender = '$uid'
AND reciever = '$new_user_id' )
OR ( reciever = '$uid'
AND sender = '$new_user_id' )
ORDER BY time ASC;
编辑已编辑为在插入的最后 5 个项目中使用升序时间值。
【讨论】:
你能再检查一下查询吗,对不起,我在第一个查询中犯了一个错误,因为我有两个版本的查询。 谢谢,这应该可以帮助我把它整理好!【参考方案2】:SELECT * FROM (
SELECT *
FROM messages
WHERE
(sender = '$uid' AND reciever = '$new_user_id')
OR (reciever = '$uid' AND sender = '$new_user_id')
ORDER BY time asc
LIMIT 5) AS a ORDER by a.time DESC
【讨论】:
【参考方案3】:似乎不需要子查询。取消子查询并添加 ORDER BY time DESC LIMIT 5。
【讨论】:
你能再检查一下查询吗,对不起,我在第一个查询中犯了一个错误,因为我有两个版本的查询。以上是关于MySQL - 子查询 - SQL 语法错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 FROM 子句中的子查询进行联接操作中的 SQL 语法错误