2016-04-21 57 views
1

我有這四個表:顯示在單行兩列以上

表提供

  • ID
  • id_company
  • 描述

表公司

  • ID

表company_customer

  • id_company
  • id_customer

表客戶

我需要得到優惠,有優惠,並且還具有與這些公司的關係客戶的公司。這很簡單。

查詢我打字如下:

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; 

「問題」是,有時一個公司的報價是供diferent客戶。

讓我向您展示問題與一個真實的例子:

「易趣」 | 'offer number 1'| 'customer 1' 'Ebay'| 'offer number 1'| '客戶2'

但我需要在單行上連接或顯示兩行(只是在公司和報價相同但客戶不同的情況下)。換句話說,我需要以下結果:

'Ebay'| 'offer number 1'| '客戶1,客戶2'

我使用PHP和MySQL工作。我知道這可能是用PHP完成的,但我想知道是否可以僅使用MySQL來完成。

任何想法??

任何幫助將非常感激。我爲我的英語水平表示歉意。我知道這不是我最好的。

在此先感謝您的時間和關注。

+0

'http:// www.w3schools.com/sql/sql_groupby.asp'可能會幫助你。 –

+0

'GROUP_CONCAT()'是你的功能。更多信息:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat – mitkosoft

回答

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您的數據庫中的優惠和客戶之間沒有任何關係,因此您可能會考慮添加此類優惠。 Otherwhise所有公司的客戶將出現在該公司的每一個報價:

+-------------+-----------+----------------------------------+ 
| 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 

但是如果你想要exacly的是,一切都那麼好。

0

在您當前的表格設計中無法表示這一點,因爲報價可以引用(最多)一個公司。要做你想做的事,你需要添加一個offer_company表,id_company和id_offer,並從offer表中刪除id_company字段。然後,您將爲查詢添加一個附加連接列,並使用group by子句將具有相同報價的行組合在一起。

將行組合在一起後,可以將它們合併到一行中,並將客戶信息連接在您的php代碼中。