1

次のように2つのテーブルがあります。

リスト表

listing_id
----------
111111
111113

リスティング_機能_テーブル

id  listing_id  feature_id
------------------------------
1   111111      4
2   111111      1
5   111113      9
6   111113      1
7   111113      4

指定したすべての feature_id を持つ結果のみを取得しようとしています。したがって、私の場合、(1, 4, 9) を指定すると、listing_id のみ111113が feature_id 列にこれらを持ち、それが返されます。

クエリで IN を使用しようとしましたが、OR と同等であり、そのため間違った結果が得られます。

以下は、使用しているクエリです。

SELECT * FROM listings_features
JOIN listings ON listings.listing_id=listings_features.listing_id
WHERE listings_features.feature_id IN (1,4,9) GROUP BY listings.listing_id

これにより、次の結果が得られます。

id  listing_id  feature_id  listing_id
----------------------------------------------
1   111111      4           111111
5   111113      9           111113

代わりに次の結果を得るために使用できる方法はありますか:

id  listing_id  feature_id  listing_id
----------------------------------------------
5   111113      1, 4, 9     111113

それともphpレベルでやりますか?

4

3 に答える 3

2

group_concat()比較に使用するトリックは次のとおりです。

SELECT *
FROM listings_features lf JOIN
     listings l
     ON l.listing_id = lf.listing_id
WHERE lf.feature_id in (1,4,9)
GROUP BY l.listing_id
HAVING group_concat(distinct lf.feature_id order by lf.feature_id) = '1,4,9';

これらの機能は必要だが、他の機能は気にしない場合は、where句を削除してください。

于 2013-08-13T17:55:23.463 に答える
0
SELECT ID, MAX(Listings_features.Listing_ID), group_concat(Feature_ID),  MAX(Listings.Listing_ID) from Listings_Features
inner join Listings USING (listing_id)
WHERE Listings_Features.feature_id IN(1,4,9) 
GROUP BY ID;
  • おそらくテーブル名がめちゃくちゃです。私のリストとリストはすべて同じように見えますが、一般的には...
于 2013-08-13T17:54:31.773 に答える
0

注: 機能の数を把握し、それに応じて 3 を調整する必要があります。しかし、1、4、9 を探していることがわかっているので、3 があることがわかっているので、カウント用の変数を渡して入力することは難しくありません。

SELECT ID, Listing_Features.Listing_Id, group_Concat(Feature_ID), Listings.Listing_Id 
FROM listings_features
JOIN listings ON listings.listing_id=listings_features.listing_id
WHERE listings_features.feature_id IN (1,4,9) GROUP BY listings.listing_id
GROUP BY Listing_Features.ID, Listing_Features.Listing_Id, Listings.Listing_Id FROM listings_features
HAVING count(*) = 3
于 2013-08-13T17:38:53.550 に答える