我有这四个表:
表格提供
表公司
table company_customer
表客户
我需要获得优惠,提供优惠的公司以及与这些公司有关系的客户。这很简单。
我正在输入的查询如下:
$('#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做到这一点。
任何想法??
任何帮助都会非常感激。我为我的英语水平道歉。我知道这不是我最好的。
提前感谢您的时间和关注。
答案 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代码中连接客户信息。