2016-12-15 3 views
1

に参加していないとき、私は、クエリに参加していないテーブル内の値の有無に基づいて、クエリの結果をフィルタリングする必要があります。SQLのフィルタリングテーブルを

私は、ユーザーが彼らにしか見え製品を見ることができますログインフォームを持っています。私のデータモデルは、製品をユーザーにマップするprod_userテーブルです。

id product user 
1 1  1 
2 1  3 
3 1  5 
4 2  1 
5 2  2 
6 3  2 

各製品には、他の製品も関連付けられています。私のprod_assocテーブルは次のようになっています:

id product assoc 
1 5  1 
2 5  2 
3 5  3 
4 6  1 
5 6  2 

私はまた製品の情報を持つ製品テーブルを持っています。

ユーザーが見ることができる製品をクエリし、結果を繰り返し、各製品の関連製品をクエリするのは簡単ですが、そのユーザーに割り当てられた関連製品のみを返すように関連する製品をフィルタする方法?私が使用している

フルクエリは長いですが、基本的に私は

SELECT p.*, pu.user FROM products p LEFT JOIN prod_user pu ON pu.product=p.id WHERE user = [user variable]; 

のようなユーザーのための製品をつかむと、基本的に私は

SELECT p.fieldsIWant, pa.otherFields FROM prod_assoc pa LEFT JOIN products p ON p.id = pa.assoc WHERE pa.product = [that product variable as I iterate] 
などの各製品の関連製品の配列を作成します

(これは、必要に応じて、すべての製品の関連付けを閲覧するフロントエンドを送信する。)

問題は、関連製品は、そのユーザのためにフィルタリングされていない、です。たとえば、ユーザー1が見ることができる製品5のすべての関連製品を知りたいとします。私はすべての関連製品(1,2,3)を取得していますが、実際にはユーザー1は製品1と2のみを表示する必要があります。prod_userテーブルのデータに基づいて関連製品をフィルタリングする必要があります。これはどうすればいいですか?私はさまざまな方法でそれに参加しようとしましたが、うまくいきませんでした。何か言いたいことはありますか?prod_userテーブルに基づいて、このユーザーに表示されているものだけをプロダクト5のすべてのassocに与えますか?

編集:ここでの答えは確かにテーブルを結合してからちょうど追加し、文をフィルタリングすることです。

+0

5と1であなたの変数を使用)の製品1及び2を参照してくださいする必要がありますか? ur 2の表によると、差別化の手段はありません。 – additionster

+0

prod_userテーブル(一番上のもの)には、製品を表示できるユーザーごとのエントリがあります。そのため、ユーザー1は製品1と2を表示できますが、製品3は表示できません。 – Harold

+0

3つのテーブルがあります(Product、Product_user、product_associate) – additionster

答えて

1

はウルたとえば、次のクエリを使用します。

(ユーザー1が見ることができるという製品5用関連製品のすべての私は、関連するすべての製品(1、2を取得し、そして3)が、実際に利用者1です。唯一

SELECT pu.user, pu.product, pa.product FROM prod_user pu, prod_assoc pa 
WHERE pa.assoc = pu.product AND pa.product = 5 AND pu.user = 1; 

は、関連製品がユーザー1に表示され

+0

お世話になりました。 – Harold

関連する問題