2013-02-28 77 views
0

我期待創建一個查詢,它將返回有多少時間字段具有相同的ID的計數。對於我的情況,將會在同一個包中找到對象。sql/php返回有多少時間字段具有相同的ID的計數

例如看到這個表:

Bagid | Object 
-------------- 
B1 | wallet 
B1 | perfume 
B1 | charger 
B2 | wallet 
B2 | perfume 
B2 | pen 
B3 | book 
B3 | pen 
B3 | wallet 

因此,舉例來說,如果我一直在尋找有多少時間「錢包」和「香水」已經在同一個袋子被發現預期的結果將是:

wallet, perfume = 2

因爲它們出現在同一包裏兩次。

然後我希望能夠這樣做n個對象將被存儲在一個數組中(但之後)。

幫助將不勝感激,謝謝。


新問題:

我怎麼能把它應該是在()中的對象,通過使用包含對象的二維數組。例如我做了... IN('$ Objects [1] [0]','$ Object [1] [1]'),它不起作用。對象[1] [0] &對象[1] [1]給我正確的對象,當我回應他們。無法找到一種方法來實現它的工作。

回答

2
SELECT COUNT(*) FROM (
    SELECT Bagid 
    FROM yourtable 
    WHERE Object IN ('wallet', 'perfume') 
    GROUP BY Bagid 
    HAVING Count(DISTINCT Object)=2 
) s 

請參閱小提琴here

支持任意數量的對象,你必須dinamically創建上面的查詢,更新IN子句和對象的數量,或者可以用一個小技巧是這樣的:

SELECT COUNT(*) FROM (
    SELECT Bagid 
    FROM yourtable 
    WHERE FIND_IN_SET(Object, 'wallet,perfume') 
    GROUP BY Bagid 
    HAVING Count(DISTINCT Object)= 
    LENGTH('wallet,perfume')- 
    LENGTH(REPLACE('wallet,perfume', ',', ''))+1 
) s; 

看到它here

+0

'B2&B3'中常見的'(筆,錢包)'如何? – SparKot 2013-02-28 11:53:05

+0

感謝這樣一個快速回復,頂部小屋 – StringerB 2013-02-28 11:55:39

+0

@DoSparKot是它可能已經2(以及筆(錢包)),這只是一個例子 – StringerB 2013-02-28 11:58:23

0
SELECT 
    b1.Bagid 
FROM 
    bags as b1 
JOIN 
    bags b2 
ON 
    b1.Bagid=b2.Bagid 
    AND b2.Object='perfume' 
WHERE 
    b1.Object = 'wallet' 

擁有一個像KEY idx1(Object,Bagid)索引使我對MySQL的EXPLAIN EXTENDED合理Using where; Using index,沒有報警。

+0

要試一試。乾杯 – StringerB 2013-02-28 12:51:00

相關問題