在一行中显示两行或更多行

时间:2016-04-21 12:01:55

标签: php mysql rows

我有这四个表:

表格提供

  • id
  • id_company
  • 描述

表公司

  • ID
  • 名称

table company_customer

  • id_company
  • id_customer

表客户

  • ID
  • 名称

我需要获得优惠,提供优惠的公司以及与这些公司有关系的客户。这很简单。

我正在输入的查询如下:

$('#chkTest1').change(function() {

var flagCheck = $(this).prop('checked');
$('#txtTest1').prop('disabled', !flagCheck).val('').off();
if(flagCheck)
{
  $('#txtTest1').focus();  
}    

$('#txtTest1').blur(function () {                
    console.log($("#chkTest1").prop('checked'));                
   });
});

“问题”在于,有时候不同客户可以获得公司的报价。

让我用一个真实的例子向你展示问题:

'易趣'| '提供1号'| '客户1' '易趣'| '提供1号'| '客户2'

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

'易趣'| '提供1号'| '客户1,客户2'

我使用PHP和MySQL。我知道这可以用PHP完成,但我想知道是否可以用MySQL做到这一点。

任何想法??

任何帮助都会非常感激。我为我的英语水平道歉。我知道这不是我最好的。

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

3 个答案:

答案 0 :(得分:1)

您可以使用聚合的GROUP_CONCAT函数

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

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

答案 1 :(得分:1)

您需要按公司和优惠进行分组,因此您需要此查询:

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

但如果你真的想要那么一切都好的话。

答案 2 :(得分:0)

在您当前的表格设计中无法表示这一点,因为优惠可以引用(最多)一家公司。要执行您希望的操作,您需要添加带有id_company和id_offer的offer_company表,并从商品表中删除id_company字段。然后,您将为查询添加一个额外的连接列,并使用group by子句将具有相同商品的行组合在一起。

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