单独订购两个查询然后加入它们

时间:2017-01-03 03:19:17

标签: mysql

我正在设计一个评论系统,用户首先看到他们的评论(最新的评论),然后是其他任何用户评论(最新的评论)。所以最后它看起来像:

  1. 我的评论1(12月3日)

  2. 我的评论2(12月2日)

  3. 我的评论3(12月1日)
  4. 不是我的评论1(12月5日)
  5. 不是我的评论2(12月4日)
  6. 不是我的评论3(12月3日)
  7. 所以从我所拥有的表中提取信息:

    SELECT * FROM ( SELECT * FROM testTable WHERE me='1' ORDER BY `lastReply` DESC ) DUMMY1
    UNION
    SELECT * FROM (SELECT * FROM testTable ORDER BY `lastReply` DESC) DUMMY2
    

    这就是我想要的,而不是通过lastReply降序排序(所以用户最新评论是第一个),而是通过lastReply升序排序(因此用户最早的评论是第一个)。 对于我的生活,我无法弄清楚为什么会这样。有什么建议吗?

    您可以在此处查看表格的简化版本:

    mysqli_query($con," CREATE TABLE testTable( text varchar(255), me varchar(255), lastReply varchar(255) ) "); 
    mysqli_query($con,"INSERT INTO testTable (text, me , lastReply) VALUES ('A',1,3),('E',0,2),('C',1,1) , ('D',0,1) , ('B',1,2) ,('F',0,3) ");
    
    
    echo '<table border="1">';
    while($arrayrow = mysqli_fetch_array($result)) {
        echo '<tr><td>'.$arrayrow['text'].'</td><td>'.$arrayrow['me'].'</td><td>'.$arrayrow['lastReply'].'</td></tr>';
    };
    echo '</table>';
    

1 个答案:

答案 0 :(得分:1)

SELECT * from (
SELECT *,0 as sort_order FROM table WHERE IP='userIP'
UNION
SELECT *,1 as sort_order FROM table WHERE IP <>'userIP' 
)tmp
ORDER by sort_order asc, lastReply Desc