2013-02-28 49 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

相关问题