id | cid | name
1 | 1 | product 1
2 | 1 | product 2
3 | 1 | product 3
4 | 1 | product 4
5 | 1 | product 5
6 | 1 | product 6
7 | 2 | product 7
8 | 2 | product 8
9 | 2 | product 9
10 | 2 | product 10
11 | 2 | product 11
12 | 2 | product 12
13 | 3 | product 13
14 | 3 | product 14
15 | 3 | product 15
16 | 3 | product 16
PHP:
$query = "SELECT cid FROM product GROUP BY cid ORDER by cid DESC";
$result = mysql_query($query) or die('Error : ' . mysql_error());
echo 'id |cid | name <br>';
while($row = mysql_fetch_array($result, MYSQL_NUM))
{
list($cid) = $row;
$query2 = "SELECT id, cid, name FROM product WHERE cid = $cid ORDER by id DESC LIMIT 3";
$result2 = mysql_query($query2) or die('Error : ' . mysql_error());
while($row2 = mysql_fetch_array($result2, MYSQL_NUM)){
list($id2, $cid2, $name2) = $row2;
echo ''.$id2.' | '.$cid2.' | '.$name2.' <br>';
}
}
返回==&gt;&gt;
id | cid | name
16 | 3 | product 16
15 | 3 | product 15
14 | 3 | product 14
12 | 2 | product 12
11 | 2 | product 11
10 | 2 | product 10
6 | 1 | product 6
5 | 1 | product 5
4 | 1 | product 4
现在,我不想选择1选择。
示例:
$query = "SELECT cid FROM product WHERE (SELECT id, cid, name FROM product WHERE cid = $cid ORDER by id DESC LIMIT 3) GROUP BY cid ORDER by cid DESC";
$result = mysql_query($query) or die('Error : ' . mysql_error());
while($row = mysql_fetch_array($result, MYSQL_NUM)){
list($id, $cid, $name) = $row;
echo ''.$id.' | '.$cid.' | '.$name.' <br>';
}
返回==&gt;&gt;
id | cid | name
16 | 3 | product 16
15 | 3 | product 15
14 | 3 | product 14
12 | 2 | product 12
11 | 2 | product 11
10 | 2 | product 10
6 | 1 | product 6
5 | 1 | product 5
4 | 1 | product 4
帮助我!感谢您的支持
答案 0 :(得分:0)
如果不使用程序,我不知道这是否是最优雅的解决方案...
这里做的是SUBSTRING_INDEX用于限制GROUP_CONCAT使用的条目。
GROUP_CONCAT的结果用作FIND_IN_SET搜索的集合。
SELECT
p1.*
FROM
products p1
inner join (
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(p2.id SEPARATOR ','), ',', 3) AS ids
FROM
products p2
GROUP BY
p2.cid
) AS ids
ON FIND_IN_SET(p1.id, ids.ids)
ORDER BY
p1.cid DESC,
p1.id
PS:
您现在不会遇到这种情况,但请注意:GROUP_CONCAT具有最大长度设置(如字符串的字符长度),用于设置GROUP_CONCAT可以返回的内容。默认情况下,这是1024个字符,因此对于3个INT ID就足够了,因为每个带有adjending逗号的INT id最多为12个字符。如果你走极端并想要超过85条记录每个cid ,你需要调整你的mysql group_concat_max_len
设置。
答案 1 :(得分:0)
实现它的最简单方法是
SELECT *
FROM product p
WHERE (
SELECT COUNT(*)
FROM product p1
WHERE p1.cid = p.cid AND
p.id <= p1.id
) <= 3
order by p.id desc
<强> DEMO 强>