2016-07-19 68 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