【问题标题】:JOINed mySQL query and LIMITJOINed mySQL 查询和 LIMIT
【发布时间】:2012-02-14 08:26:37
【问题描述】:

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

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

有一张表是这样的:

产品

  • product_id
  • 姓名
  • 品牌

另外一张表是同一产品的不同类型,看起来像这样:

product_type

  • type_id
  • 类型
  • 费用
  • product_id

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

所以我的问题来了:

我选择连接的两个表并将它们限制为 15。但由于类型多于产品,我选择了 15 个产品类型,它们属于未知数量的产品(因为一个产品可以有 1、2 或任意数量的类型) .我需要能够在两个表中搜索并根据两个表中的列对结果进行排序,仅从 products 中选择 15 个条目并从 product_types 中为每个条目选择一个条目也不好,因为我需要显示所有类型...

那么你能帮我做什么吗?我有点坚持。 (希望我的描述可以理解)

【问题讨论】:

  • 欢迎来到 StackOverflow!请发布与问题相关的代码。它将帮助我们帮助您。
  • 能否请您发布一些示例表数据,以及预期的输出

标签: php mysql join limit


【解决方案1】:

有多种方法可以实现这一目标。我看到的主要困难是您需要对两个表中的列进行排序。因此,考虑到与类型的关系,前 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

这应该做的是从您的产品表中获取前 15 个 DISTINCT 行,当连接到您的类型表并按您的条件排序时,然后获取这些产品的所有类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多