2010-03-01 123 views
4

此SQL查询为我提供了我想要的结果;不过,我想用一个不同的列排序结果:使用PHP/MySQL运行查询,然后按另一列重新排序结果

SELECT * 
FROM post 
    INNER JOIN account ON post.account_id = account.account_id 
WHERE post_id > new 
ORDER BY post_date 
ASC LIMIT 10; 

我不能简单地改变ORDER BY post_date ASCORDER BY post_id DESC,而实际上为了将在查询我想要的方式...它会给我的错10篇文章。

我只是想拿确切结果上面的查询,然后重新排序结果由post_id
如果可能的话,我想用SQL来做到这一点,如果不是的话,我可以通过将结果添加到反转的新数组中来排序结果。

+0

您的查询失败,返回MySQL错误1060:复制,因为两个表中的'account_id'现有的列名。 – 2010-03-01 22:21:14

+0

它的确如此,我对数据库进行了一些更改,现在它们都像魅力一样工作,谢谢指出! – 2010-03-01 22:38:31

回答

6

使用子查询来重新排序:

SELECT * FROM (
    SELECT * 
    FROM post 
    INNER JOIN account ON post.account_id = account.account_id 
    WHERE post_id > neww 
    ORDER BY post_date ASC LIMIT 10; 
) ORDER BY post_id 
+0

感谢工作就像一个魅力,我不能相信我一直在寻找2天这个:(... – 2010-03-01 22:28:51

+0

谢谢,我认为这将是我的方式去与自己的问题(在SQL Server 2k8上)。你已经为我确认了。+1 – sholsinger 2010-09-24 15:42:51

+0

这个查询缺少AS,应该是...)AS x ORDER BY post_id。请参阅https://dev.mysql.com/doc/refman/5.7/en/from-clause-subqueries.html – Mike 2016-07-28 16:23:58

4

使用子查询:

SELECT * FROM (
    SELECT * 
    FROM post 
    INNER JOIN account 
    ON post.account_id = account.account_id 
    WHERE post_id > neww 
    ORDER BY post_date ASC 
    LIMIT 10) AS T1 
ORDER BY post_id DESC 
+0

+1这就是我要做的 – 2010-03-01 22:30:16

+0

哇,注意这里发生的竞争状况。 (都发布于3月1日22:13)虽然两个答案都是正确的,但只有一个人可以得到“正确的”答案。我觉得很有意思的是,Mark的回答将子查询命名为“T1”,然后不会引用它。 – sholsinger 2010-09-24 15:45:38

+0

我尝试了两种,但这对我有用 – 2013-02-18 01:02:54

相关问题