sql / php返回有多少时间字段具有相同id的计数

时间:2013-02-28 11:38:46

标签: php sql count

我希望创建一个查询,它将返回多少个时间字段具有相同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个对象(但之后)。

帮助将不胜感激,谢谢。


新问题:

如何通过使用包含对象的2d数组来放置应该在IN()中的对象。例如我做了... IN('$ Objects [1] [0]','$ Object [1] [1]')并且它不起作用。对象[1] [0]&当我回应它时,对象[1] [1]给了我正确的对象。无法找到让它发挥作用的方法。

2 个答案:

答案 0 :(得分:2)

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

请参阅小提琴here

要支持任意数量的对象,你必须在上面创建上面的查询,更新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

答案 1 :(得分: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)这样的索引给了我一个合理的Using where; Using index,并没有警告MySQL的EXPLAIN EXTENDED