2012-04-02 114 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