2011-06-15 72 views
2

所以我具有從1至40的某一範圍,PHP的MySQL合併多個相同的查詢到一個

我已經爲了使用從同一個表和列,但來自不同的範圍等執行不同的查詢:

mysql_query("SELECT * FROM table WHERE column > 1 && column <= 15"); 
mysql_query("SELECT * FROM table WHERE column >=18 && column <= 30"); 
mysql_query("SELECT * FROM table WHERE column >= 35 && column <= 38"); 

我從這些查詢中得到的總行數對於不同的操作一個接一個......但是我怎樣才能將這3個例子查詢合併爲1並得到相同的結果呢?

回答

5
SELECT * FROM table 
WHERE (column > 1 AND column <= 15) 
OR (column >= 18 AND column <= 30) 
OR (column >= 35 AND column <= 38) 

//編輯:OP要數的行數爲每個條件:

SELECT 
(SELECT COUNT(*) FROM table WHERE column > 1 AND column <= 15) AS count_1, 
(SELECT COUNT(*) FROM table WHERE column >= 18 AND column <= 30) AS count_2, 
(SELECT COUNT(*) FROM table WHERE column >= 35 AND column <= 38) AS count_3 
FROM table 

COUNT_1,_2,並且COUNT_3是行對於每個條件的數字。

+0

我想從表,其中列中獲取的行數分別從1到15,18 30和35 38範圍內,但在一個查詢中 – fxuser 2011-06-15 19:17:27

+0

@fxuser您能否詳細說明「單獨但在一個查詢中」的含義? – 2011-06-15 19:22:13

+0

當我在我的問題上執行3個查詢我得到3個數字例如143,4343和938 ...我如何使這3個查詢一個,並得到相同的結果? – fxuser 2011-06-15 19:32:54

2

大量編輯,因爲我誤解了問題

如果你想所有的行,你可以只是做:

SELECT * FROM table WHERE (column > 1 AND column <= 15) OR 
    (column >=18 AND column <= 30) OR 
    (column >= 35 AND column <= 38) 

但是,如果你只是想爲每個計,即不是正確的方式去做。計數可以使用count(*)直接在MySQL中計算。即使你要做三個單獨的查詢,最好在選擇所有行時使用count(*)(它使用的內存要少得多)。

雖這麼說,你可以得到計數所有這樣的行:

$query = "SELECT ". 
     " (SELECT COUNT(*) FROM table WHERE column > 1 AND column <= 15) AS count_1,". 
     " (SELECT COUNT(*) FROM table WHERE column >= 18 AND column <= 30) AS count_2,". 
     " (SELECT COUNT(*) FROM table WHERE column >= 35 AND column <= 38) AS count_3"; 

$res = mysql_query($query); 
extract(mysql_fetch_assoc($res)); 

echo "The counts are $count_1, $count_2, and $count_3"; 

extract功能將一個關聯數組,並設置局部變量數組中的每個項目。我只是覺得它比處理從mysql_fetch_assoc返回的數組更容易使用。

注意: @ fn-n首先發布SQL,我只是將它格式化爲PHP。我會寫它除了以不同的方式(S?)他已經做了正確的方式:)

+0

可能我沒有解釋它儘可能多,目前我得到所有行的列是從1到15等...我這樣做3次,並得到從每個查詢不同數量的行..我不想結合查詢並獲得總行數,我想獲得相同的不同行數,但在一個查詢 – fxuser 2011-06-15 19:20:48

+0

那麼你想要什麼樣的最終結果?多個PHP數組,每個都有數據集? MySQL只能返回單個維度的結果,但有辦法通過對返回的行進行一些後處理來分離數據......是您需要的嗎? – 2011-06-15 19:24:34

+0

引用我上面的評論:當我對我的問題執行3個查詢時,我得到3個數字,例如143,4343和938 ......我如何使這3個查詢得到相同的結果? – fxuser 2011-06-15 19:33:20

0

$query = 'SELECT * FROM table '. 
      'WHERE (column > 1 && column <= 15) '. 
      'OR (column >=18 && column <= 30) '. 
      'OR (column >= 35 && column <= 38)'; 
mysql_query($query);