2016-07-19 96 views
0

好了,我在mysql中的兩個表是這樣的:使左柱聯接查詢

TABLE 1 - users 
------------- 
id | username | user_data 
1 | George | user_data 
2 | John  | user_data 


TABLE 2 - services 
------------- 
id | id_user | service_name | service_data 
1 | 1  | lunch  | whatever 
2 | 1  | dinner  | … 
3 | 2  | lunch  | … 

好了,有了這一點,如果我就與左聯接的查詢是這樣的:

SELECT username, service_name 
FROM users 
LEFT JOIN services ON users.id = services.id_user 
WHERE 1 

我得到這個:

username | service 
George | lunch 
George | dinner 
John  | lunch 

但我需要打印管理在Excel中的數據網格是這樣的:

username | service_1 | service_2 
George | lunch  | dinner 
John  | lunch 

我有很多行用戶和服務,並且不可能爲每個用戶查詢服務。

任何想法使這隻有一個查詢或任何技巧在PHP?

+0

有多少種類型的服務?只有午餐和晚餐,還是別的? –

+0

您好蒂姆,服務的數量是完全dinamically,可以是5或零... –

回答

1

您可以使用GROUP_CONCAT,但請注意,這不會在單獨的列中返回服務名稱,而只會返回一列。例如:

SELECT username, GROUP_CONCAT(COALESCE(services.service_name, 'NA')) AS user_services 
FROM users 
LEFT JOIN services 
    ON users.id = services.id_user 
GROUP BY users.id; 

將返回: enter image description here

我創造了這個sqlfiddle:

SQLFiddle

+0

該解決方案的好處是它可以處理任何數量的服務優雅。 –

+0

在任何情況下,我會需要空值以及保持秩序 –

+0

@JonayGalvánSánchez請詳細說明 – Ruben

0

這似乎是一個表支點的問題,也許不會工作,但嘗試:

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'MAX(CASE WHEN s.service_data = ''', 
     service_data, 
     ''' THEN s.service_name ELSE '''' END) AS service_', 
     @rowno := @rowno + 1 
    ) 
) INTO @sql 
FROM (SELECT DISTINCT service_data FROM services) t1 
JOIN (SELECT @rowno := 0) t2; 
SET @sql = CONCAT('SELECT u.username, ', 
        @sql, 
        ' FROM services s 
        JOIN users u ON s.id_user = u.id 
        GROUP BY u.id'); 
-- SELECT @sql; 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

SQLFiddle Demo

+0

嗨10086!您的查詢輸出一個空錯誤的結果。你能解釋你的問題嗎? –

+0

你在我的答案中檢查了演示嗎? http://sqlfiddle.com/#!9/daff7/9,它有像你的問題的結果。 – Blank

+0

是的,我在我的數據庫中執行查詢(創建和選擇),但返回一個空的結果... –

0

首先,這個問題它只是一個示例來解釋我的真正問題。真正的問題增加了很多表格,字段和更多的連接。服務在其他表中具有(或不)屬性。

遲發動機打印結果以CSV格式輸出如下: username | T恤|大小| food_service |同伴
user_1 |是| XL |是| 1
user_2 |沒有| NULL |是| 2
user_3 |是| NULL |是| 2