2010-12-14 19 views
1

あいまいなタイトルについては申し訳ありません - 例を挙げずに、私が望む振る舞いについて説明することができませんでした。また、これが重複スレッドの場合は、正しいものを指してください。削除します。上記のように、説明するのは難しいので、私が欲しいものを探し出すことができませんでした。MySQL JOINの2つのテーブル

とにかく、私は2つのテーブルからデータを選択したいと思います。 1つはプロジェクトの束を、もう1つはプロジェクトごとに複数のチェックリスト項目を保持します。私が起こることをようをいただきたい何

 
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 

は、各プロジェクトのために、このです:私はこれを返します。現時点では非常に原始的なLEFT JOINクエリを、(1つのプロジェクトだけは、現時点では、そこにある)を持ちますプロジェクトテーブル:

 
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クエリを提供することができます:ここで

は、私が現在持っているクエリはありますか?任意の助けてくれてありがとう、

EDIT

おかげで私を助けるため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

答えて

2

あなたは、各プロジェクトのために一緒にすべての記述を取得するためにgroup_concatを使用することができます。

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

これで、dそのプロジェクトのすべての説明とともに単一行に記述され、それぞれの記述はコンマで区切られます。

サンプル:

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

+0

@JamWaffes - 出力とともにサンプルスクリプトを投稿しました。 – dcp

+0

ありがとう!私は文字列の分割を行うPHPを得ることができます。私は主に、各ページの読み込みのために、20個の代わりに1つのクエリを実行する方法を探していました。 – Bojangles

0

私は、MySQLについてあまり知らないが、それはSQL Serverでなんとかですので、それはまた、MySQLで可能かもしれません。

しかし、私の主張は、SQLはこのように設計されていないので、それはかなり醜いかもしれません。 SQLでは、結果セットの各レコードは他のレコードとは独立しています。これにはいくつかの利点があります。たとえば、結果セットに追加のフィルタを適用することができます(「ahahaha」で始まる記述のみを必要とする場合)、並べ替えたり(説明で並べ替えたい場合)、内部的に並列化クエリなどの情報を失うことなく。

これは、出力の番号付け、クエリの階層化、出力の転置、またはアイテムのグループの最初のものへの特別な扱いなど、他の言語よりも少し難しいものです。

あなたの最良の選択肢は、あなたが望むように出力して後処理することです(これは非常に些細なはずです - 最後のプロジェクト名で変数を保持し、その名前を空の文字列に置き換えてください)。最後のものと同じ)、dcpの答えを使用してグループを単一の結果行に展開します。

関連する問題