0
这对于所有人来说都是困难的,如果它甚至可能在mysql中。
我有一个表,存储ID,catid,product_name
我想要做的是为每个catid选择3条记录,然后显示每个3组记录的结果第一。
因此,如果我有一个4,7的catid,那么我想显示3个结果(4),然后3个结果(7)。如何在mysql中给出的每个结果中选择3个
任何帮助,非常感谢。谢谢。
这对于所有人来说都是困难的,如果它甚至可能在mysql中。
我有一个表,存储ID,catid,product_name
我想要做的是为每个catid选择3条记录,然后显示每个3组记录的结果第一。
因此,如果我有一个4,7的catid,那么我想显示3个结果(4),然后3个结果(7)。如何在mysql中给出的每个结果中选择3个
任何帮助,非常感谢。谢谢。
用途:
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表更加一致。
非常感谢。它非常接近,但即使每个类别中有很多记录,它也只显示8个结果。它完美地显示了catid(1),但对于catid(2),catid(3)等,它只显示每个记录。我必须将x.rank <= 3更改为2,因为它显示了4个结果。我正在使用MyISAM – tomb 2010-10-31 22:48:27
@tomb:正如我的评论所述,MyISAM往往不会给出一致的结果。 MySQL没有你想要的本地语法。 – 2010-10-31 23:22:01
OMG Ponies上面有一个错误的答案。用ELSE @rownum:= 1替换ELSE @rowum:= 1',并且查询应该可以工作。 – 2010-11-01 18:17:39