2

こんにちは、私は何時間もこれを理解しようとしてきましたが、頭を包むことができないようです..

このSQLテーブルを見てください..

ここに画像の説明を入力

すべての filter_cat_id に存在する product_id を検索しようとしているので、この例では、filter_cat_id 1 2 および 3 で存在するため、product_id 30 になります。Product_id 30 は同じ filter_cat_id に 2 回存在します。製品 ID を数えてから個別の猫 ID を数え、その数が一致することを確認します。

何か案は?これはmysqlで可能ですか?もう 1 つのオプションは、PHP を使用することです。

ありがとう!

4

3 に答える 3

1
SELECT
    product_id, count(i.product_id) as t
FROM
    (SELECT 
        *
    FROM
        tablename
    GROUP BY product_id , filter_cat_id) as i
GROUP BY product_id
HAVING t = 3
于 2013-04-28T08:28:48.130 に答える
1

すべての filter_cat_id に存在する product_id を検索しようとしています。したがって、この例では、filter_cat_id 1 2 および 3 で存在するため、product_id 30 になります。

一般に、これは product_id でグループ化し、次を使用することで実行できますHAVING COUNT(product_id) >= x– ここで、xはカテゴリの数です。

SELECT product_id FROM table GROUP BY product_id HAVING COUNT(product_id) >= 3

(実際の数をクエリに挿入できるように) 前もってカテゴリの数がわからない場合は、サブクエリを使用してその値を取得できます。

SELECT product_id FROM table GROUP BY product_id
  HAVING COUNT(product_id) >= (SELECT COUNT(DISTINCT category_id) FROM table)

編集:わかりました。検索するcategory_idsは、ある種の検索フォーム/フィルターメカニズムから来ているようです。

その場合、アイテムのフィルタリングを追加する必要があり、比較する数値を暗黙的に埋め込む必要がありますが、問題ありません。

SELECT product_id FROM table
  WHERE category_id IN(1,2,3)
  GROUP BY product_id
  HAVING COUNT(product_id) >= 3
于 2013-04-28T05:22:25.827 に答える
0

これは、個別のカテゴリの数を決定するのに十分スマートであり、その数の個別のカテゴリを持つ product_id を選択する必要があります。

SELECT product_id
FROM
    (SELECT DISTINCT product_id, filter_cat_id
    FROM test.play) a
GROUP BY product_id
HAVING count(product_id) = (SELECT count(DISTINCT filter_cat_id) FROM test.play)
;

テストデータ:

ここに画像の説明を入力

Query Result:
30
40
于 2013-04-28T05:56:37.910 に答える