我有这四张桌子:
桌上提供
身份证件
id U公司
描述
表公司
身份证件
名称
表公司客户
id U公司
身份证客户
表客户
身份证件
名称
我需要得到报价,有报价的公司,还有与这些公司有关系的客户。很简单。
我正在键入的查询如下:
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;
“问题”在于,有时一家公司的报价可以提供给不同的客户。
让我用一个真实的例子来说明这个问题:
'Ebay'|'offer number 1'|'customer 1'
'Ebay'|'offer number 1'|'customer 2'
但我需要在一行中连接或显示这两行(只是在公司和报价相同但客户不同的情况下)。换句话说,我需要得到以下结果:
'Ebay'|'offer number 1'|'customer 1,customer 2'
我使用PHP和MySQL。我知道这可以用PHP完成,但我想知道是否可以只用MySQL来完成。
有什么想法吗??
任何帮助都将不胜感激。我为我的英语水平道歉。我知道这不是我最好的。
提前感谢您的时间和关注。
最佳答案
您需要按公司和报价进行分组,因此需要以下查询:
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
myway数据库中的报价和客户之间没有关系,所以您可以考虑添加这样的内容。否则,本公司的所有客户将出现在本公司的每份报价中:
+-------------+-----------+----------------------------------+
| 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
但如果你想试试的话,一切都会好起来的。