我是新手并坚持了几天......尝试从Google和这些论坛中找到的所有内容。
我有一个MySQL表,我需要从中提取数据。
我需要提取AgentID = 1234
所有记录
同时,拉出OfficeID = 4321
(和AgentID != 1234
以防止欺骗行为的所有记录)
然后首先显示具有AgentID记录的结果(如果存在),然后显示OfficeID记录。
我尝试了一个UNION,但是找不到第一种排序或显示Agent的方法。 尝试了array_merge和两个查询/结果,但是合并后的数据被混合而不是Agent First数据,再次无法按代理排序。
任何想法都将不胜感激!
比尔
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
尝试类似:
SELECT * FROM table
WHERE AgentId = 1234 OR (OfficeId = 4321 AND AgentId != 1234)
ORDER BY CASE WHEN AgentId = 1234 THEN 0 ELSE 1 END;