2010-12-14 124 views
1

对于模糊的标题我感到抱歉 - 我无法想出没有给出示例的我想要的行为的解释。另外,如果这是重复的线程,请将我指向正确的一个,然后删除它。我无法搜索我想要的东西,因为如上所述,这很难解释...MySQL加入两张表

无论如何,我想从两个表中选择数据。一个拥有一堆项目,而另一个拥有每个项目的多个清单项目。我此刻非常原始LEFT JOIN查询,返回这个(只有一个项目,此刻):

 
name     description 
Project file symlinks One 
Project file symlinks Two 
Project file symlinks seven 
Project file symlinks ahahahahaha 
Project file symlinks many 
Project file symlinks ANOTHER ONE 

我倒是喜欢发生是这样的,在每个项目项目表:

 
name     description 
Project file symlinks One 
         Two 
         seven 
         ahahahahaha 
         many 
         ANOTHER ONE 

或者null,没关系。基本上,我只想打印一次项目名称,但打印出相应的清单项目。

下面是该查询我目前有:

 
SELECT Projects.name, DevProgress.description 
FROM DevProgress 
LEFT JOIN Projects 
ON Projects.id = DevProgress.projectID 

谁能提供一个MySQL JOIN查询,这样我可以得到我想要的行为?感谢您的帮助,

编辑

非常感谢DCP帮了我。我终于想出了这个LEFT JOIN查询,发布参考:

 
SELECT name, GROUP_CONCAT(description) AS checklist 
FROM Projects LEFT JOIN DevProgress ON Projects.id = DevProgress.projectID 
GROUP BY name; 

和输出:

 
name      checklist 
Project file symlinks  One,Two,seven,ahahahahaha,many,ANOTHER ONE 
Testing Project numer 1 NULL 

詹姆斯

+0

可以发布您的当前查询吗? – DeaconDesperado 2010-12-14 21:28:47

回答

2

你可以使用group_concat让所有的描述一起对每个项目:

SELECT name,GROUP_CONCAT(description) FROM project GROUP BY name; 

因此,这将打印d istinct项目名称,以及该项目在单个行上的所有描述,每个描述将以逗号分隔。

样品:

create table project (name varchar(100), description varchar(100)); 

insert into project values ('Project file symlinks', 'One'); 
insert into project values ('Project file symlinks', 'Two'); 
insert into project values ('Project file symlinks', 'seven'); 
insert into project values ('Project file symlinks', 'ahahahahaha'); 
insert into project values ('Project file symlinks', 'many'); 
insert into project values ('Project file symlinks', 'ANOTHER ONE'); 

SELECT name,GROUP_CONCAT(description) FROM project GROUP BY name;  

结果:

name      GROUP_CONCAT(description) 
'Project file symlinks' 'One,Two,seven,ahahahahaha,many,ANOTHER ONE' 
+0

谢谢。你可以发布一些示例输出吗? – Bojangles 2010-12-14 21:30:52

+0

@JamWaffes - 我发布了一个示例脚本以及输出。 – dcp 2010-12-14 21:36:09

+0

谢谢!我可以让PHP来做字符串拆分。我主要是为每个页面加载寻找一种方法来做一个查询而不是像20。 – Bojangles 2010-12-14 22:25:52

0

我不知道很多关于MySQL,但它是在SQL Server中是可行的,所以它可能在MySQL的可能也。

但我的观点是,即使它可能是可行的,它将是非常丑陋的,因为SQL不是这样设计的。在SQL中,结果集的每个记录都独立于其他记录。这有几个优点 - 例如,您可以对结果集应用额外的筛选器(如果您决定只需要以“ahahaha”开头的描述),则可以对其重新排序(如果要按描述进行排序),可以在内部并行化查询等不丢失信息。

这就是为什么SQL中的某些东西比其他语言更难一些,例如编号输出,查询层次结构,转置输出或对一组项目中的第一项进行特殊处理。

所以,你最好的选择可能是要求输出并按照你想要的方式进行后处理(这应该是非常简单的 - 只要保留一个带有最后一个项目名称的变量,并用空字符串替换该名称与最后一个相同)或使用dcp的答案并将该组展平为单个结果行。