2012-04-02 44 views
2

我对SQL很陌生,所以我会尽量保持它对我所要做的事情的简单。MySQL - 子查询 - 您的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服务器版本正确的语法使用 附近手册“FROM(SELECT * FROM消息ORDER BY时间DESC)”在1号线

我明白,我得到一些错误在这里,但是由于SQL不是我真正的东西,我不知道该怎么转。

有一点帮助会导致伟大的原因,我一直在墙上撞了我的头几个小时。

谢谢。

+1

也许是因为您定义了两次“FROM”? – hjpotter92 2012-04-02 18:18:37

+0

刚刚编辑它显然我错过了第二个FROM之前的ORDER BY。 – 2012-04-02 18:24:20

+0

您仍然在使用两个'FROM'语句。尝试将查询分解为子部分(正如我在答案中所做的那样),它可以帮助您更好地了解逻辑。 ;) – hjpotter92 2012-04-02 18:27:00

回答

0
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 
+0

太棒了,你明白了。感谢一堆人:) – 2012-04-02 18:33:20

2

试试这个:

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项上升时间值求助于。

+0

你能否再次查看查询,对不起,我在第一个错误,因为我有两个版本的查询。 – 2012-04-02 18:25:25

+0

谢谢,这应该帮我把它分类! – 2012-04-02 18:31:15

0

看起来不需要子查询。取消子查询并粘贴ORDER BY时间DESC LIMIT 5.

+0

你能否再次查看查询,抱歉,我在第一个查询中犯了一个错误,因为我有两个版本的查询。 – 2012-04-02 18:26:12