【问题标题】:Fetch min() from other table with multiple relations从具有多个关系的其他表中获取 min()
【发布时间】:2016-11-10 23:26:21
【问题描述】:

我正在尝试为 products.desc 创建全文搜索。作为回应我想要

  • 产品:id、desc
  • 价格:最低价格行相对于 products.id
  • 供应商:id,提供该价格的供应商的名称。

我正在使用

SELECT products.id, MIN(prices.price) as prices_price, prices.id as prices_id, products.desc, products.product_number, prices.supplier_id, suppliers.name FROM products
 INNER JOIN prices
 ON prices.product_id = products.id
 INNER JOIN suppliers
 ON prices.supplier_id = suppliers.id
 WHERE 
 MATCH (products.desc) AGAINST ('test*' IN BOOLEAN MODE)
 GROUP BY prices.product_id

这将返回正确的(最低)价格,尽管所有其他价格的值。*-rows 未确定/错误。由于 GROUP BY prices.product_id 获取具有最低 ID 的列/行。

    Products
    id | desc
    ----------------------------------------
    1  | product_1
    2  | product_2


    Prices
    id | product_id | price | supplier_id
    ------------------------------------------------
    1  | 1          | 100   | 1
    2  | 1          | 150   | 2
    3  | 2          | 200   | 2
    4  | 2          | 250   | 1

    Suppliers
    id | name
    ------------------------------------------------
    1  | Supplier1  
    2  | Supplier2   

【问题讨论】:

    标签: php mysql inner-join min


    【解决方案1】:

    您必须通过加入对价格进行分组的子查询并返回最低价格和相应的 product_id 来获得最低价格。

    然后再次加入价格表以获得最低价格的数据集。

    然后使用最低价格数据集的supplier_id加入供应商。

    Fiddle

    SELECT
        products.id,
        lowestPrice.price,
        prices.id AS prices_id,
        products.desc,
        prices.supplier_id,
        suppliers.name
    FROM
        products
    INNER JOIN (
        SELECT
            prices.price,
            prices.product_id
        FROM
            prices
        GROUP BY
            product_id
        HAVING
            MIN(prices.price)
    ) AS lowestPrice ON lowestPrice.product_id = products.id
    INNER JOIN prices ON prices.price = lowestPrice.price AND prices.product_id = lowestPrice.product_id
    INNER JOIN suppliers ON prices.supplier_id = suppliers.id
    WHERE 
     MATCH (products.desc) AGAINST ('test*' IN BOOLEAN MODE)
    

    【讨论】:

    • 谢谢,虽然它返回:#1111 - Invalid use of group function?
    • 抱歉,正在修复它
    • 恐怕不行。此查询获取与搜索查询匹配的所有行。它也不分组。我读了这个任务虽然没有多大帮助..:stackoverflow.com/questions/12561774/…
    • 我在答案中添加了一个小提琴,您可以调整它以使其适合您的设置以重现错误吗?
    猜你喜欢
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多