加入mySQL查询和LIMIT

时间:2012-02-14 08:26:38

标签: php mysql join limit

这是我在这个论坛上的第一篇文章(所以请保持温和)

我正在开发一个庞大的产品数据库,我有很多关于它们的信息表。

有一个表格如下:

产品

  • PRODUCT_ID
  • 名称
  • 品牌

另一个表格具有不同类型的相同产品,如下所示:

PRODUCT_TYPE

  • TYPE_ID
  • 成本
  • PRODUCT_ID

我使用连接来选择两个表,它工作正常,但由于两个表中有超过一千个条目,我想限制选择并在页面上只显示15个条目。

所以这就是我的问题:

我选择加入的两个表并限制它们15.但由于类型多于产品,我选择15种产品类型属于未知数量的产品(因为一种产品可以有1,2或任意数量的类型) 。我需要能够在两个表中进行搜索并根据两者中的列来排序结果。从产品中选择15个条目和从product_types中选择一个条目并不好,因为我需要显示所有类型... < / p>

那你能帮帮我怎么办?我有点困惑。 (我希望我的描述是可以理解的)

1 个答案:

答案 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行,然后获取这些产品的所有类型。