在一行中显示两行或多行

Show two or more rows in a single row

我有这四个 table:

table 优惠

table 家公司

table company_customer

table 客户

我需要获取报价、提供报价的公司以及与这些公司有关系的客户。很简单。

我输入的查询如下:

SELECT c.name, c.description, cu.name cu_name 
        FROM companies c 
        INNER JOIN offers o ON o.id_company = c.id 
        INNER JOIN company_customer cc ON cc.id_company = c.id 
        INNER JOIN customers cu ON cu.id = cc.id_customer 
        WHERE o.id_company = 1 
        ORDER BY o.id_company;

"problem"就是有时候一个公司的offer是可以提供给不同的客户的。

让我用一个真实的例子来告诉你这个问题:

'Ebay' | 'offer number 1' | 'customer 1' 'Ebay' | 'offer number 1' | 'customer 2'

但我需要将两行连接或显示在一行中(仅在公司和报价相同但客户不同的情况下)。换句话说,我需要以下结果:

'Ebay' | 'offer number 1' | 'customer 1, customer 2'

我与 PHP 和 MySQL 一起工作。我知道这可以用 PHP 来完成,但我想知道是否可以用 MySQL.

来完成

有什么想法吗??

任何帮助将不胜感激。我为我的英语水平道歉。我知道这不是我最好的。

提前感谢您的时间和关注。

在您当前的 table 设计中无法表示这一点,因为报价最多只能引用一家公司。要执行您希望的操作,您需要使用 id_company 和 id_offer 添加 offer_company table,并从报价 [=19] 中删除 id_company 字段=].然后,您将向查询添加一个额外的连接列,并添加一个 group by 子句以将具有相同报价的行分组在一起。

将行组合在一起后,您可以在 php 代码中将它们合并为一行,连接客户信息。

您可以使用聚合 GROUP_CONCAT 函数

SELECT c.name, c.description, GROUP_CONCAT(string SEPARATOR ',') 
FROM <<table And Joins...>>
GROUP BY c.name, c.description;

见他http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

您需要同时按公司和报价分组,因此您需要此查询:

SELECT
    c.`name` AS companyName,
    o.description AS offerName,
    GROUP_CONCAT(cs.`name` ORDER BY cs.id) AS customerNames
FROM
    companies c
    INNER JOIN offers o ON o.id_company = c.id
    INNER JOIN company_customer cc ON cc.id_company = c.id
    INNER JOIN customers cs ON cs.id = cc.id_customer
WHERE
    c.id = 1
GROUP BY
    c.`name`,
    o.description

Amyway 在你的数据库中没有报价和客户之间的关系,所以你可以考虑添加这样的。否则该公司的所有客户将出现在该公司的每个报价中:

+-------------+-----------+----------------------------------+
| companyName | offerName | customerNames                    |
+-------------+-----------+----------------------------------+
| Ebay        | Offer 1   | Customer 1,Customer 2,Customer 3 |
| Ebay        | Offer 2   | Customer 1,Customer 2,Customer 3 |
+-------------+-----------+----------------------------------+
2 rows in set

但如果你真的想要那个,那一切都可以。