2011-04-04 32 views
0

我有這三個查詢,我想盡量減少到一個。我會怎麼做呢?如何將此MySQL查詢最小化爲一個?

$query = "SELECT COUNT(*) FROM states WHERE id = 1"; 
    $query2 = "SELECT COUNT(*) FROM cities WHERE id = 5"; 
    $query3 = "SELECT COUNT(*) FROM areas WHERE id = 3"; 

如果有人指點我一些很棒的網站或文章,可以幫助我練習和理解MySQL命令,我將不勝感激。非常感謝。

編輯:我想腳本返回結合在一個結果(變量)的行數。

+0

假設,'id'是PRIMARY KEY,那麼'SELECT 1' :) – 2011-04-04 12:50:38

+0

@ Silverlight好點 – Devart 2011-04-04 13:02:51

回答

3

那麼,在一個查詢做到這一點的唯一方法(我知道)是這樣的:

SELECT 
(SELECT COUNT(*) FROM states WHERE id = 1) AS state_count, 
(SELECT COUNT(*) FROM cities WHERE id = 5) AS city_count, 
(SELECT COUNT(*) FROM areas WHERE id = 3) AS area_count 

這幾乎可以被稱爲「優化」,怎麼一回事,因爲還有3次表掃描,但可以」避免這些,因爲您想在三個不同的表上使用COUNT

編輯

如果你想總和三者的數字,那麼這就是答案:

SELECT 
(
    (SELECT COUNT(*) FROM states WHERE id = 1) 
    + (SELECT COUNT(*) FROM cities WHERE id = 5) 
    + (SELECT COUNT(*) FROM areas WHERE id = 3) 
) AS sum 
+0

我不想要很多結果,我想要的是它應該返回組合的行數.. – 2011-04-04 12:56:03

+0

謝謝你,這工作出色:) – 2011-04-04 13:17:14

3
SELECT 'states', COUNT(*) FROM states WHERE id = 1 
UNION 
SELECT 'cities', COUNT(*) FROM cities WHERE id = 5 
UNION 
SELECT 'areas' , COUNT(*) FROM areas WHERE id = 3 

編輯:我喜歡@Silver光的回答最好,但是既然(他)想不到另一種方式去做,我想我會把這個作爲參考。

+0

UNION應該在這裏做什麼?它在mySQL中是一個串聯運算符嗎? – 2011-04-04 13:18:33

+0

是不是'國家','城市'和'地區'是別名?你如何將結果存儲在一個別名中,而不是三個? – 2011-04-04 13:19:47