这是我在这个论坛上的第一篇文章(所以请保持温和)
我正在开发一个庞大的产品数据库,我有很多关于它们的信息表。
有一个表格如下:
产品
另一个表格具有不同类型的相同产品,如下所示:
PRODUCT_TYPE
我使用连接来选择两个表,它工作正常,但由于两个表中有超过一千个条目,我想限制选择并在页面上只显示15个条目。
所以这就是我的问题:
我选择加入的两个表并限制它们15.但由于类型多于产品,我选择15种产品类型属于未知数量的产品(因为一种产品可以有1,2或任意数量的类型) 。我需要能够在两个表中进行搜索并根据两者中的列来排序结果。从产品中选择15个条目和从product_types中选择一个条目并不好,因为我需要显示所有类型... < / p>
那你能帮帮我怎么办?我有点困惑。 (我希望我的描述是可以理解的)
答案 0 :(得分:2)
有很多方法可以实现这一目标。我看到的主要困难是你需要从两个表的列上订购。因此,考虑到与类型的关系,前15个不同的产品将出现在可变数量的行中。最简单的方法可能是使用GROUP_CONCAT
SELECT
p.*,GROUP_CONCAT(t.type)
FROM
products p INNER JOIN types t ON p.product_id=t.product_id
WHERE
[your WHERE clauses]
GROUP BY
p.product_id
ORDER BY
[columns]
LIMIT 15
但是,这会为您提供有关您的类型的有限数据,并且可能会在您的ORDER BY中出现问题,因为这会在GROUP之后发生。
您可能想要做这样的事情
SELECT
*
FROM
( SELECT
DISTINCT p.*
FROM
products p INNER JOIN types t ON p.product_id=t.product_id
WHERE
[your WHERE clauses]
ORDER BY
[columns]
LIMIT 15 ) pl
INNER JOIN types tl ON pl.product_id=tl.product_id
这应该做的是在您的类型表上加入并按照您的条件进行排序时,从您的products表中获取前15个DISTINCT行,然后获取这些产品的所有类型。