2012-09-30 67 views
2

我在我的数据库中的两个表大致布局如下选择多行数据从一个子表与父行表一起在MySQL

客户

id | other data 
1 | data 1 
2 | data 2 
3 | data 3 
4 | data 4 

员工分配

id | clientid | employee 
1 | 1  | Fred 
2 | 1  | Jim 
3 | 3  | Peter 
4 | 4  | Fred 
5 | 4  | Peter 
6 | 4  | James 

有没有办法从employee表中返回客户表中的所有员工记录?理想情况下,我会希望行和工作人员名称的ID,所以我不认为我可以使用GROUP_CONCAT来收集多个列。也不保证employee表中的每个客户端都会有条目,因此它需要为这些客户端返回一个空/空结果。

我已经尝试了两种方式来获得这个到目前为止在php中,这两种方式是非常低效的在这种或那种方式。 (A)第一个是有效地建立一个新的数据库连接到第一个数据库连接的一半,以返回与该客户端ID相关联的雇员列表,但显然导致大量的数据库连接仅为一个查询。 (B)第二种方法是在代码的开头将整个雇员表拉入数组中,然后搜索该数组以抽出与该客户ID相关的行,然后将该雇员姓名和行ID添加到该数组中随着时间的推移,这将最终以一个非常大的数组立即被转储到php中。

是否有某种方式只用一个SQL查询就能解决这个问题?我不是所有的大惊小怪的数据将如何走出来,因为我相信我可以通过它在PHP在另一端进行排序,但也许沿

结果东西线

id | other data | employees 
1 | data 1  | 1,Fred;2,Jim 
2 | data 2  | 
3 | data 3  | 3,Peter 
4 | data 4  | 4,Fred;5,Peter;6,James 

如果这个问题在我道歉之前就已经问过了,但是我在上周一直在寻找一些东西,并没有找到那么多帮助。

回答

0
SELECT e.*, c.other_data FROM Employee e 
INNER JOIN Client c ON e.client_id = c.id 

那么,你最终得到的是在一个查询中抓取的两个表中的所有信息。所以,数据将是:

 id  client_id Employee other_data 
    1    1   Fred  data 1 
    2    1   Jim   data 1 
    3    3   Peter  data 3 
    4    4   Fred  data 4 
    5    4   Peter  data 4 
    6    4   James  data 4 
+0

谢谢,但是不会返回client_id = 2行的空行。 – astropoint

+0

这是因为没有列出的员工使用客户端#2 :)。如果您想了解某个特定客户端的相关信息,只需添加一个WHERE子句即可。就像添加:WHERE e.client_id = 2将为您提供专门的客户端#2的员工列表。 – bms

+0

@bms,是的,你是对的。自从OP接受它以来,这是正确的答案。对不起。 –

相关问题