2013-01-11 81 views
4

合併這兩個查詢的正確語法是什麼?將兩個mysql查詢合併爲一個

SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1 

SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1 

我想:

SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1 
UNION 
SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1; 

,但我得到 「UNION的錯誤用法和ORDER BY」。

編輯 此外,我希望結果被返回到一行中。所以,我可以訪問PHP例如值

$row['nextclick'] and $row['topclick'] 

從西蒙的建議,因爲我要返回數據

單行

回答

10

我不應該使用UNION你可以在不ORDER BY你的第一個SELECT和那麼UNION吧。

編輯
但是,您可以

BY或LIMIT應用於爲了將個人選擇,將子句括起來,括號內的SELECT:

MySQL UNION documentation

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10) 
UNION 
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10); 

然後馬上KES您的SQL

(SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1) 
UNION 
(SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1); 

編輯2
要返回在array

SELECT (SELECT clicks 
     FROM clicksTable 
     WHERE clicks > 199 
     ORDER BY clicks ASC 
     LIMIT 1) AS NextClick, 
     (SELECT clicks 
     FROM clicksTable 
     ORDER BY clicks DESC 
     LIMIT 1) AS TopClick; 
+0

這隻返回一個結果 – PutraKg

+0

@PutraKg看我的編輯;這應該返回給你你正在尋找 –

+0

謝謝。它正在工作。但是如果我想讓它返回一個數組而不是兩個值呢?就像在php $ row ['nextclick']和$ row ['topclick'] – PutraKg

3
SELECT clicks FROM 
    (SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1) A 
UNION 
SELECT clicks FROM 
    (SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1) B; 
1

首先,你要一個unionunion all

問題是在第一部分order by。您可以解決此問題,使用子查詢:

(select * from (SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1)) 
UNION ALL 
(select * from (SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1)) 

union表達,order by只允許在最後,它適用於整個表達式。