2011-12-19 336 views
2

我是新手,堅持了幾天......嘗試了一切,我可以從Google和這些論壇中找到。兩個查詢,合併結果,排序

我有一個MySQL表,我需要從中提取數據。

我需要把所有記錄,其中AgentID = 1234 此外,拉所有記錄OfficeID = 4321(和AgentID != 1234防止易受騙的人) 則首先顯示與AGENTID記錄的結果,如果存在的話,那麼OfficeID記錄。

我試過了一個UNION,但找不到排序或顯示代理的第一個辦法,第二個辦公室。 嘗試array_merge和兩個查詢/結果,但合併數據混合而不是代理第一次數據,再次,無法首先按代理排序。

任何想法將不勝感激!

Bill

+1

你可以發表你的DB模式? – hungneox 2011-12-19 17:15:15

回答

4

您可以在ORDER BY中使用CASE語句強加指定的條件。

SELECT * 
    FROM YourTable 
    WHERE AgentID = 1234 
     OR (OfficeID = 4321 AND AgentID <> 1234) 
    ORDER BY CASE WHEN AgentId = 1234 THEN 0 ELSE 1 END, 
      AgentID, OfficeID 
+0

謝謝大家......我解決了這個問題,有人建議: SELECT *,IF(AgentID = 1234,1,2)AS AgentsFirst FROM AgentsTable WHERE AgentID = 1234 OR OfficeID = 4321 ORDER BY AgentsFirst – Bill 2011-12-19 19:19:37

0

嘗試這樣的:

(SELECT 1 AS batch_no, .... FROM ....) # the query with AgentID - the one that you want displayed first 
UNION 
(SELECT 2 AS batch_no, .... FROM ....) 

ORDER BY batch_no 
0

試着這麼做:

SELECT * FROM table 
WHERE AgentId = 1234 OR (OfficeId = 4321 AND AgentId != 1234) 
ORDER BY CASE WHEN AgentId = 1234 THEN 0 ELSE 1 END;