2011-12-14 37 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

相關問題