2012-04-02 164 views
0

我有一個表中的幾百條記錄,我需要得到他們的最後50個,但我需要25名男性和25名女性。有一個性別欄。我只是無法弄清楚如何進行查詢。我可以得到一些幫助嗎?不知道如何寫這個查詢

+1

請提供表格結構。如何對記錄進行排序? – Devart 2012-04-02 14:54:27

回答

5
(SELECT * FROM table WHERE gender = 'M' ORDER BY id DESC LIMIT 25) 
UNION 
(SELECT * FROM table WHERE gender = 'F' ORDER BY id DESC LIMIT 25) 

這將工作,我猜。對於ID部分的訂單,我假設您有一個自動增量ID列,使得最後的添加了具有最高ID的記錄。

+0

總腦梗塞。謝謝。 – 2012-04-02 15:25:49

+0

請注意,如果沒有'ORDER BY',這可能不會按照要求返回最後的50_。 – 2012-04-02 17:31:47

+0

不夠公平,補充完成答案。 – hoppa 2012-04-03 10:14:03

6

如果您確切需要50個,請使用UNION,其中每個最後25個。這假設你有一些自動遞增的id列,它按降序排序以檢索每個性別的最新25個。

爲了對UNION的單個組件使用ORDER BYLIMIT,MySQL期望這些組件被包含在()中。

(SELECT * FROM tbl WHERE gender='F' ORDER BY id DESC LIMIT 25) 
UNION ALL 
(SELECT * FROM tbl WHERE gender='M' ORDER BY id DESC LIMIT 25) 

注意:順便說一下,我用SELECT *這裏爲簡便起見,但你應該永遠實際上做,在一個UNION查詢。相反,請明確列出所需的列,並確保它們在UNION的兩個部分中的順序相同。

像:

(SELECT col1, col2, coln FROM tbl WHERE gender='F'....) 
UNION ALL 
(SELECT col1, col2, coln FROM tbl WHERE gender='M'....) 
2

我剛想到這裏迅速,無擔保。

SELECT * FROM table WHERE gender = 'male' ORDER BY ID DESC LIMIT 25 
UNION ALL 
SELECT * FROM table WHERE gender = 'female' ORDER BY ID DESC LIMIT 25 

基本上,它得到最後25名男性和最後25名女性,並將結果結合在一起。

1

有沒有這樣的概念,除非你有另一列,你可以使用ORDER BY

我建議寫2個查詢,僅限於男性,另一個僅限於女性。

然後使用一個順序,所以有一個'最後'的設置。

然後翻轉(使用DESC),所以他們是第一反而。

然後使用LIMIT子句來選擇你想要的數字。

然後終於,UNION他們在一起。

+1

你們太好了...... :) – Randy 2012-04-02 14:54:58

1

嘗試使用兩個查詢,一個抓住25個最新的男性,一個抓住25個最新的女性。然後只是連接結果。

SELECT * FROM males LIMIT 25 ORDER BY DESC 

SELECT * FROM females LIMIT 25 ORDER BY DESC