2011-12-14 41 views
4

我试图在SELECT中将UNION两列和第三列的别名混合使用。将两列中的数据合并为一个用于排序

我还需要检索匹配WHERE子句的数据,然后按别名列(MLS_SORT)进行排序。

这个以及我尝试过的变体都不起作用。

SELECT * 
FROM 
(SELECT MLS_AGENT_ID AS MLS_SORT FROM mlsdata) 

UNION 

(SELECT MLS_OFFICE_ID AS MLS_SORT FROM mlsdata) 

WHERE (MLS_AGENT_ID = $agent_narid) OR (MLS_OFFICE_ID = $office_narid)  

ORDER BY MLS_SORT 

这部分做的工作,并创建MLS_SORT别名有正确的价值观,但我无法弄清楚如何将结果限制上述WHERE子句:

(SELECT MLS_AGENT_ID AS MLS_SORT FROM mlsdata) 

UNION 

(SELECT MLS_OFFICE_ID AS MLS_SORT FROM mlsdata) 

上午我至少要走正确的道路,还是这不是正确的方式?

感谢您的任何帮助。

回答

5

关键是要了解UNION的语法:查询UNION查询

我认为你想要:

SELECT MLS_SORT 
FROM 
(
    SELECT MLS_AGENT_ID AS MLS_SORT 
     FROM mlsdata 
    WHERE MLS_AGENT_ID = $agent_narid 

    UNION 

    SELECT MLS_OFFICE_ID AS MLS_SORT 
     FROM mlsdata 
    WHERE MLS_OFFICE_ID = $office_narid 
) 
ORDER BY MLS_SORT 

要将两个ID子集合放到一个结果集中,然后对它们进行排序。

但是,这整个查询看起来像它会给出一个双行结果集 - 一个代理和一个办公室的行。那是你要的吗?

您的逻辑有效地将代理ID和办公室ID号码转换为单个结果集。这在你的应用中有意义吗?

2

尝试这样:

select * from 
    (
    (SELECT MLS_AGENT_ID AS MLS_SORT 
    FROM mlsdata 
    WHERE (MLS_AGENT_ID = $agent_narid) 
    ) 
    UNION 
    (SELECT MLS_OFFICE_ID AS MLS_SORT 
    FROM mlsdata 
    WHERE (MLS_OFFICE_ID = $office_narid) 
    )) a 
    ORDER BY MLS_SORT 

编辑

交替次序由

ORDER BY 1 
+0

嗨,Randy,使用你的例子,(加入ALL后得到所有11个结果),我得到了MLS_SORT列的正确结果。 Office和Agent ID结合在一起。但是,即使使用了*,也不会检索到其他数据。 – Bill 2011-12-14 21:42:43

+0

即使检索到的行数是11,只有MLS_SORT列中有数据...如果我将*更改为任何其他列名称(存在),我会得到: 警告:mysql_num_rows():提供的参数不是有效的MySQL结果资源在...任何想法? – Bill 2011-12-15 15:45:23

相关问题