Php MySQL-为特定列中的每个值y获取x记录
我有一张这样的桌子: 栏目:Php MySQL-为特定列中的每个值y获取x记录,php,mysql,greatest-n-per-group,Php,Mysql,Greatest N Per Group,我有一张这样的桌子: 栏目: id | parent 记录: 1 | 1 2 | 1 3 | 1 4 | 2 5 | 2 6 | 2 7 | 3 8 | 4 9 | 5 对于所有家长,我希望获得前两张记录,因此我应该: 1 | 1 2 | 1 4 | 2 5 | 2 7 | 3 8 | 4 9 | 5 如何在MySQL中实现这一点?我需要使用子查询吗?谢谢。试试这个 SELECT a.id, a.parent FROM Table1 AS a WHERE (SELECT COUN
id | parent
记录:
1 | 1
2 | 1
3 | 1
4 | 2
5 | 2
6 | 2
7 | 3
8 | 4
9 | 5
对于所有家长,我希望获得前两张记录,因此我应该:
1 | 1
2 | 1
4 | 2
5 | 2
7 | 3
8 | 4
9 | 5
如何在MySQL中实现这一点?我需要使用子查询吗?谢谢。试试这个
SELECT a.id, a.parent FROM Table1 AS a WHERE
(SELECT COUNT(*) FROM Table1 AS b
WHERE b.parent = a.parent AND b.id <= a.id) <= 2
ORDER BY a.parent ASC, a.id asc
这里有几种不同的解决方案可以尝试
SELECT id, parent
FROM (
SELECT id, (@rownum:=IF(parent=@parent, @rownum+1, 1)) AS rownum,
(@parent:=parent) AS parent
FROM (SELECT @parent := null) AS _init
STRAIGHT_JOIN MyTable
ORDER BY parent) AS t
WHERE t.rownum <= 2;
备选方案:
SELECT t1.id, t1.parent
FROM MyTable AS t1
LEFT OUTER JOIN MyTable AS t2
ON t1.parent = t2.parent AND t1.id >= t2.id
GROUP BY t1.id
HAVING COUNT(*) <= 2;
已经有一个问题和一个答案了,所以:.-很抱歉,这是为了MSSQL@AartStuurman:这是针对MSSQL的,不是针对MySQL的。你在寻找什么distinct@Kyslik:那会有什么帮助?他也在使用php,不是吗?他可以从数据库中加载所有父对象,然后使用id数组选择不同的值。我在打手机,我可能会被误读、误读或颠倒顺序。
SELECT t1.id, t1.parent
FROM MyTable AS t1
LEFT OUTER JOIN MyTable AS t2
ON t1.parent = t2.parent AND t1.id >= t2.id
GROUP BY t1.id
HAVING COUNT(*) <= 2;