2011-03-15 13 views
-2

私は3つのテーブルを持っています:KeyWords、GrantsKeyConn、Grants。特定の「許可」に接続C#でこのMySQLクエリをどのように行うのですか?

KeyWords Table

それぞれ「キーワード」が関連付けられている/:それが設定されている方法は、各「許可」とのようなキーワードテーブルに格納されている「キーワード」を、関連付けられていなどGrnatsKeyConnテーブル内:

GrantsKeyConn Table

...複数の「キーワードは」1「助成金」に接続/関連付けることができるように。最後に、それぞれの「助成金は」などの助成テーブルに格納されている:私はテキストボックスにキーワードを指定することで助成金をフィルタリングしようとしている

Grants Table

。ですから、 "test、new、final"というキーワードを指定すると...その結果、関連するキーワードを持つ助成金のみが除外されます。 3つのキーワードしか関連付けられていない助成金をもたらす必要はありません。 1、2、3、...、すべてのキーワードが指定された権限が与えられます。 さらに、グラントに複数のキーワードが関連付けられている場合、結果に複数のキーワードが表示されることはありません。

このクエリはどのようにして作成しますか? KeywordテーブルからSelectを実行してキーワードのIDを取得し、そのIDを使用してGrantsKeyConnテーブルにアクセスして関連する権限を取得し、次にGrantsテーブルにアクセスして権限を取得します。もしそうなら、どうすればいい?

私の質問をさらに明確にする必要があるかどうかを教えてください。

+0

私の答えは非常に遅いので、あなたが選んだ答えを見直してください。そして、私は正直なところ、これを達成することは決して目的ではない方法を人々に勧めると考えています。 – Aidiakapi

+0

@Aidiakapi ...あなたのソリューションは別の結果を返すことができますか?たとえば、付与に1つ以上のキーワードが関連付けられている場合、その付与に関連するキーワードごとに1回ではなく1回表示することができます。 DISTINCTのアイデアはどこに出てくるのですか? – Hristo

+0

'DISTINCT'はいつも' SELECT'の後に来ます。他の例と同様です。 – Aidiakapi

答えて

1

あなたはこれを使用することができます:あなたは任意のより多くの助けが必要な場合は

SELECT 
--Choose the columns you want here 
FROM 
Grants 
INNER JOIN GrantsKeyConn ON Grants.ID = GrantsKeyConn.GrandsID 
INNER JOIN KeyWords ON GrantsKeyConn.KeyWordsID = KeyWords.ID 
WHERE 
--Filter here 
ORDER BY 
--Order here 

は、私に知らせてください。 これはすべてのリンクを返しますが、かなり大きな表のように見えるので、実際に使用する列を照会するだけです。

また、C#からデータベースを照会する方法を知りたければ、多くのオプションがあります。 thisが便利です。

2

あなたはこれで、この

select * from grants g, grantsKeyConn gKC where g.id = gKC.grantsId and gKC.KeyWordsID in (select id from KeyWords where KeyWord in ('new','final','test');

問題のように何かをしたいかもしれませんあなたは複数のキーを持っている助成金を探している場合は、複数の結果を取得することです。あなたはそれを次のようなものに強化することができます。

select DISTINCT(g.id) from .... 

それを別の呼び出しに渡します。

もう1つのオプションは、休止状態のようなものを使用して、すべてをマップします。

+1

これは彼が尋ねたものではなく、参加を求めましたが、これはサブクエリであり、ゆっくりとしています。 – Aidiakapi

+0

@CtrlDot ...構文 'grant g'と' grantsKeyConn gKC'はどういう意味ですか? – Hristo

+0

@Aidiakapi実際には、データベースサーバーが取得したパスを分析する必要があります。サブクエリの処理速度が遅いという空白の文を作ることはできません。内部結合は、実際にクエリを実行する前にテーブル全体に対して多くの操作を実行しています。 – CtrlDot

関連する問題