2014-08-27 34 views
1

我已经使用下面的查询,但它显示错误。联合和订单通过MySql

SELECT 
    id as number,id,parentid,videoid,subject,name,created,message 
FROM 
    umqlh_hdflv_comments 
WHERE 
    `parentid` = '0' 
    AND `published` = '1' 
    AND `videoid` = '8' 
ORDER BY 
    number DESC, 
    parentid 
UNION ( 
    SELECT 
     parentid as number,id,parentid,videoid,subject,name,created,message 
    FROM 
     umqlh_hdflv_comments 
    WHERE 
     `parentid` != '0' 
     AND `published` = '1' 
     AND `videoid` = '8' 
    ) 

MySQL表示:文件

#1221 - Incorrect usage of UNION and ORDER BY 

我该如何解决这个问题?

+2

在sql语句的最后使用'ORDER BY'。 – Rikesh 2014-08-27 08:06:08

+1

请将您的SQL拆分为多行,以提高可读性。真的很难看一看。 – Raghu 2014-08-27 08:06:08

+0

您不能像联合会那样使用订单。 – Elin 2014-08-27 16:33:13

回答

1

ORDER BY需要在完整的SQL语句结束时应用,

SELECT 
    id as number, 
    id, 
    parentid, 
    videoid, 
    subject, 
    name, 
    created, 
    message 
FROM 
    umqlh_hdflv_comments 
WHERE 
    `parentid` = '0' 
    AND `published` = '1' 
    AND `videoid` = '8' 
UNION ( 
    SELECT 
     parentid as number, 
     id, 
     parentid, 
     videoid, 
     subject, 
     name, 
     created, 
     message 
    FROM 
     umqlh_hdflv_comments 
    WHERE 
     `parentid` != '0' 
     AND `published` = '1' 
     AND `videoid` = '8' 
    ) 
    ORDER BY number DESC,parentid 

Reference

0

从句法上看,您需要将订单移动到查询的末尾。除了“限制”之类的优化之外,由于不能保证结果不会被排序,因此在联合中对其中一个部件进行排序是没有意义的。

SELECT id as number 
     ,id 
     ,parentid 
     ,videoid 
     ,subject 
     ,name 
     ,created,message 
FROM umqlh_hdflv_comments 
WHERE `parentid` = '0' 
    AND `published` = '1' 
    AND `videoid` = '8' 
UNION 
SELECT parentid as number 
    ,id 
    ,parentid 
    ,videoid 
    ,subject 
    ,name 
    ,created,message 
FROM umqlh_hdflv_comments 
WHERE `parentid` != '0' 
AND `published` = '1' 
AND `videoid` = '8' 
ORDER BY number DESC,parentid 

但是这个查询也可以表示为:

SELECT case when parentid = 0 then id else parentid end as number 
     ,id 
     ,parentid 
     ,videoid 
     ,subject 
     ,name 
     ,created,message 
FROM umqlh_hdflv_comments 
WHERE `published` = '1' 
    AND `videoid` = '8' 
ORDER BY number DESC,parentid 

如果parentId的可以是你需要添加的parentid空不空的where子句。此外,如果行不是唯一的(我假设这是因为该列被命名为id),则需要为该查询添加不同的等价对象。