2013-04-28 71 views
2

嗨傢伙,我一直試圖弄清楚這一點了幾個小時,但我似乎無法環繞它我的頭..MySQL的搜索行的基礎並

看看這個SQL表..

enter image description here

我試圖尋找存在於所有filter_cat_id的,所以在這個例子將它的product_id 30的product_id,因爲它與filter_cat_id 1 2和3的存在.. PRODUCT_ID 30存在於相同的filter_cat_id兩次,否則我只是計數產品ID,然後是不同的貓ID,並確保計數的匹配。

任何想法?這可能在MySQL?另一種選擇是使用PHP。

謝謝!

+0

請發表您的SQL代碼,所以我們可以幫助你更好。 – GregD 2013-04-28 05:20:29

回答

1

我試圖尋找存在於所有filter_cat_id的一個PRODUCT_ID,因此在本例中是PRODUCT_ID 30,因爲它與filter_cat_id 1 2和3

一般存在,這可以通過PRODUCT_ID分組,並使用HAVING COUNT(product_id) >= x來完成 - 在X是類別的數量,

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

如果你不知道類別數前期(從而y您可以同時插入的實際數量到查詢),就可以得到該值與子查詢,

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 
+0

這就是如果他們使用所有的類別。 – 2013-04-28 05:25:43

+0

正確,讓我調整我的答案。 – CBroe 2013-04-28 05:28:45

+0

但是..產品ID可以多次存在於同一類別中。我可能有4個product_id,它們都存在於相同的類別ID中。他們是一種消滅具有相同product_id和category_id的行的方法嗎? – user933791 2013-04-28 05:30:29

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) 
; 

測試數據:

enter image description here

Query Result: 
30 
40 
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