Php Mysql根据单个列的唯一值限制返回结果的数量

Php Mysql根据单个列的唯一值限制返回结果的数量,php,mysql,sql,Php,Mysql,Sql,我有三张桌子 Product_to_categories => contains two columns (Category_id, Product_id) Product => contains a few columns (product_id, name, sku, ...) categories => contains a few columns (category_id, name, ....) 我想获得前10个与产品表关联的唯一类别id的结果集,一个类别可以有

我有三张桌子

Product_to_categories   => contains two columns (Category_id, Product_id)
Product => contains a few columns (product_id, name, sku, ...)
categories => contains a few columns (category_id, name, ....)
我想获得前10个与产品表关联的唯一类别id的结果集,一个类别可以有许多产品分配给它,我想返回一个类别内的所有产品,但我只想获得前8个类别中的产品

当前查询:

SELECT p2c.category_id, p.pname, c.category_name
FROM product p LEFT JOIN   product_to_category p2c
ON (p.product_id = p2c.product_id)
Left Join category c (p2c.category_id = c.category) LIMIT 0,8
电流输出

catID  |    p.name   |    catName |<br/>
1      |     docs    |      shoe<br/>
1      |     bob      |     shoe<br/>
1      |     mom      |     shoe<br/>
1      |     cat      |     shoe<br/>
1      |     dang     |     shoe<br/>
1      |     kit      |     shoe<br/>
2      |     pis      |     book<br/>
2      |     jiz      |     book<br/>
catID | p.name | catName |
1 | docs | shoe
1 |鲍勃|鞋
1 |妈妈|鞋子
1 |猫|鞋
1 |当|鞋
1 |套件|鞋
2 | pis |书
2 | jiz |书
目前,我只得到前8个结果,但我希望得到以下输出:

catID  |    p.name   |    catName |<br/>
1      |     docs    |      shoe<br/>
1      |     bob      |     shoe<br/>
1      |     mom      |     shoe<br/>
1      |     cat      |     shoe<br/>
1      |     dang     |     shoe<br/>
1      |     kit      |     shoe<br/>
2      |     pis      |     book<br/>
2      |     jiz      |     book<br/>
3      |     docs     |     shirt<br/>
3      |     bob      |     shirt<br/>
3      |     mom      |     shirt<br/>
4      |     cat      |     light<br/>
4      |     dang     |     light<br/>
5      |     kit      |     sound<br/>
6      |     pis      |     mic<br/>
6      |     jiz      |     mic<br/>
7      |     docs     |     pen<br/>
7      |     bob      |     pen<br/>
7      |     mom      |     pen<br/>
7      |     cat      |     pen<br/>
8      |     dang     |     lace<br/>
8      |     kit      |     lace<br/>
8      |     pis      |     lace<br/>
8      |     jiz      |     lace<br/>
catID | p.name | catName |
1 | docs | shoe
1 |鲍勃|鞋
1 |妈妈|鞋子
1 |猫|鞋
1 |当|鞋
1 |套件|鞋
2 | pis |书
2 | jiz |书
3 |文件|衬衫
3 |鲍勃|衬衫
3 |妈妈|衬衫
4 |猫|灯
4|dang|light
5 |套件|声音
6|pis|mic
6|jiz|mic
7 |文件|笔
7 |鲍勃|潘
7 |妈妈|笔
7 |猫|笔
8|dang|花边
8 |套件|花边
8|pis|花边
8|jiz|花边
我希望结果集包含分配给前8个类别的所有产品的结果

请告知。 谢谢
Hadi

我有点不确定为什么您的查询是从product表开始的,所以我不打算这样做,但除此之外,我认为您需要的是:

SELECT c.category_id, p.pname, c.category_name
FROM category c 
    INNER JOIN product_to_category pc ON c.category_id = pc.category_id
    INNER JOIN product p ON pc.product_id = p.product_id
WHERE c.category_id in (SELECT TOP 8 category_id FROM Category)
ORDER BY 1, 2

8类还是10类?若某个类别并没有产品,那个么应该显示下一个类别?您的问题并没有真正定义您想要做得足够好的内容。你可以用子查询做你想做的事情,如果你只需要前8个类别的产品,你怎么能把后两个类别(没有产品)放在同一个表中?对不起,我应该在我的问题中说得更清楚,我并不总是只需要前8个类别的产品,我将使用分页,所以我将需要0,8个类别的产品在第一页,8-16第二页等等…对不起,我应该在我的问题上更清楚,我并不总是只需要前8个类别的产品,我将使用分页,因此,我将需要从0,8个类别的产品在第一页,8-16第二页等,我相信你的解决方案上面总是返回前8个类别,我想我需要使用限制0,8,包括分页在整个交易?