使用UNC关键字在mysql查询中使用DESC或ASC的顺序

时间:2012-12-26 12:55:32

标签: php mysql sql select

在我的页面中,我使用以下查询来显示从当前时间到选择的旧时间的选择。但它选择从旧时选择到当前时间选择的行。

我想显示从当前时间到旧时的选择

$result=mysql_query("(SELECT choice_id,poll_id,choicecreationtime from je_addchoice ORDER BY choicecreationtime DESC)
    UNION
    (SELECT choice_id,poll_id,datetime_voted from je_user_vote ORDER BY datetime_voted DESC)");

我不知道为什么会出现这个问题。如果我不使用UNION意味着它工作正常。例如。以下查询显示当前时间到旧

的顺序
 $result = mysql_query("SELECT * FROM je_addchoice, je_addpoll where je_addpoll.privacy='0' AND je_addpoll.start_date <= '$check_date' AND je_addpoll.end_date >='$check_date'  AND je_addpoll.poll_id=je_addchoice.poll_id order by je_addchoice.choicecreationtime desc");

任何人都可以帮我解决这个问题

3 个答案:

答案 0 :(得分:4)

通过子查询包装union ed查询,并在外部查询

上对它们进行排序
SELECT *
FROM 
    (
        SELECT choice_id, poll_id, choicecreationtime AS TIME
        FROM je_addchoice
        UNION
        SELECT choice_id, poll_id, datetime_voted AS TIME
        FROM je_user_vote
    ) s
ORDER BY TIME DESC

更新1

SELECT choice_id, poll_id, choicecreationtime AS TIME
FROM je_addchoice
UNION
SELECT choice_id, poll_id, datetime_voted AS TIME
FROM je_user_vote
ORDER BY Time DESC

答案 1 :(得分:3)

正如UNION Syntax所述:

        

要将ORDER BYLIMIT应用于个人SELECT,请将该子句放在括起SELECT的括号内:

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
     

但是,对于单个SELECT语句使用ORDER BY并不意味着行在最终结果中出现的顺序,因为默认情况下UNION会生成一组无序行。因此,在此上下文中使用ORDER BY通常与LIMIT结合使用,因此它用于确定要为SELECT检索的所选行的子集,即使它不一定会影响最终UNION结果中这些行的顺序。如果ORDER BYLIMIT出现ORDER BY,则会对其进行优化,因为它无论如何都无效。

     

要使用LIMITORDER BY子句对整个SELECT结果进行排序或限制,请为各个UNION语句添加括号并放置LIMIT或{ {1}}在最后一个之后。以下示例使用两个子句:

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;
     

没有括号的语句相当于刚刚显示的一个括号。

答案 2 :(得分:1)

试试这个:

SELECT choice_id, poll_id, dt
FROM (SELECT choice_id, poll_id, choicecreationtime dt FROM je_addchoice 
      UNION 
      SELECT choice_id, poll_id, datetime_voted dt FROM je_user_vote ) AS A
ORDER BY dt DESC