php - MYSQL SELECT Group By 语句

标签 php mysql select

产品表:

ProductID | Manufacturer  | Part No     | Name
-----------------------------------------------------------------
770593    | GBC           | EB100000    | GBC (30 inch) ID Neck Chain - 1 x Pack of 100 Neck Chains
775308    | Elba          | 100080883   | Elba Vision (A5) Ring Binder
801982    | Elba          | 100080883   | Elba Vision (A5) Ring Binder

匹配的 SKU 表:

SupplierSKUID | ProductID
--------------|-------------------
Sku1          | 770593 
Sku2          | 770593 
Sku3          | 775308
Sku4          | 775308
Sku5          | 801982

结果:

SupplierSKUID | ProductID
--------------|-------------------
Sku1          | Sku2 
Sku2          | Sku1 
Sku3          | Sku4
Sku3          | Sku5
Sku4          | Sku3
Sku4          | Sku5
Sku5          | Sku3
Sku5          | Sku4

从上面的例子可以看出,Sku1 和 Sku2 是一样的。 Sku3、Sku4 和 Sku5 也相同。 Sku5 与 Sku3 和 Sku4 相同,因为它在产品表中与 ProductID 775308 具有相同的名称、制造商和部件号,尽管 ProductID 不同。

我需要使用 ProductID 和产品表中的名称对匹配的 SKU 表中的相似 SKU 进行分组。

最佳答案

你可以这样做:

SELECT
  Name,
  GROUP_CONCAT(ProductId) AS LinkedProducts,
  GROUP_CONCAT(SupplierSKUID) AS LinkedSKUS
FROM
(
    SELECT
      s.ProductId,
      p.Name,
      s.SupplierSKUID
    FROM Products AS p
    INNER JOIN SKus AS s ON p.ProductID = s.ProductID 
    UNION
    SELECT
      s.ProductId,
      p1.Name AS Name1,
      s.SupplierSKUID
    FROM Products AS p1
    INNER JOIN Products AS p2  ON p1.Name = p2.Name 
                              AND p1.ProductID <> p2.ProductID 
    INNER JOIN SKus AS s ON p1.ProductID = s.ProductID 
) AS t
GROUP BY Name;

这将为您提供产品名称,以及两个表中所有链接的 SKU 和所有链接的产品 ID:

|                                                      Name |       LinkedProducts |     LinkedSKUS |
|-----------------------------------------------------------|----------------------|----------------|
|                              Elba Vision (A5) Ring Binder | 801982,775308,775308 | Sku5,Sku4,Sku3 |
| GBC (30 inch) ID Neck Chain - 1 x Pack of 100 Neck Chains |        770593,770593 |      Sku1,Sku2 |

第一个联合查询将从产品表和 SKU 表中给出匹配的产品 ID。第二个联合查询将在同一个表中给出匹配的产品名称,同时将它们与 skus 表进行匹配。

关于php - MYSQL SELECT Group By 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543327/

相关文章:

php - 多张图片上传在 iphone 和 ipad 中不起作用

c# - NHibernate 无法将 MySQL 日期/时间值转换为 System.DateTime

MySQL 和 Perl 驱动程序问题 - DBD::mysql: load_file: 找不到指定的模块

MySQL : can't set lower_case_table_names variable

mysql - SELECT 子句中的 SQL 函数计数(以百分比说明)

php - 在 Get_Where 查询中匹配 JSON 字段(Code Igniter)

php - 禁止下载 PHP 文件

php - 使用 strtotime 获取一个月中的第一个工作日

mysql - 选择 Now() 作为 CurrentDateTime mysql 时区

MySQL错误?语法错误在哪里?