我在桌子上有几百条记录,我需要得到最后50条记录,但我需要25个男性和25个女性。有一个性别列。我只是无法弄清楚如何进行查询。我可以得到一些帮助吗?
答案 0 :(得分:6)
如果您需要50个,请使用UNION
,其中每个获得最后25个。这假设您有一些自动递增的id
列,该列按降序排序,以检索每个性别的最新25个。
为了对ORDER BY
的各个组件使用LIMIT
和UNION
,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'....)
答案 1 :(得分: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的记录。
答案 2 :(得分: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名女性,并将结果结合在一起。
答案 3 :(得分:1)
除非您有另一列可用于ORDER BY
,否则没有最后一个概念。
我建议写2个查询,仅针对男性,而另一个仅针对女性。
然后使用订单,因此有一个'last'设置。
然后翻转它(使用DESC
),这样它们就是第一个。
然后使用LIMIT
子句选择所需的数字。
最后,UNION
他们在一起。
答案 4 :(得分:1)
尝试使用两个查询,一个用于获取25个最新男性,另一个用于获取25个最新女性。然后只是连接结果。
SELECT * FROM males LIMIT 25 ORDER BY DESC
SELECT * FROM females LIMIT 25 ORDER BY DESC