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;