2010-10-31 87 views
0

这对于所有人来说都是困难的,如果它甚至可能在mysql中。
我有一个表,存储ID,catid,product_name
我想要做的是为每个catid选择3条记录,然后显示每个3组记录的结果第一。
因此,如果我有一个4,7的catid,那么我想显示3个结果(4),然后3个结果(7)。如何在mysql中给出的每个结果中选择3个

任何帮助,非常感谢。谢谢。

回答

0

用途:

SELECT x.id, 
     x.catid, 
     x.product_name 
    FROM (SELECT t.id, 
       t.catid, 
       t.product_name, 
       CASE 
       WHEN @catid = t.catid THEN @rownum := @rownum + 1 
       ELSE @rownum := 1 
       END AS rank, 
       @catid := t.catid 
      FROM YOUR_TABLE t 
      JOIN (SELECT @rownum := 0, @catid := -1) r 
     ORDER BY t.catid, t.product_name) x 
WHERE x.rank <= 3 

介意,我已经看到了怪异的行为从MyISAM表 - InnoDB表更加一致。

+0

非常感谢。它非常接近,但即使每个类别中有很多记录,它也只显示8个结果。它完美地显示了catid(1),但对于catid(2),catid(3)等,它只显示每个记录。我必须将x.rank <= 3更改为2,因为它显示了4个结果。我正在使用MyISAM – tomb 2010-10-31 22:48:27

+0

@tomb:正如我的评论所述,MyISAM往往不会给出一致的结果。 MySQL没有你想要的本地语法。 – 2010-10-31 23:22:01

+0

OMG Ponies上面有一个错误的答案。用ELSE @rownum:= 1替换ELSE @rowum:= 1',并且查询应该可以工作。 – 2010-11-01 18:17:39

相关问题