0

我希望创建一个查询,该查询将返回有多少时间字段具有相同 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() 中的对象。例如我做了 ...IN ('$Objects[1][0]', '$Object[1][1]') 但它不起作用。当我回显它们时,Objects[1][0] 和 Object[1][1] 给了我正确的对象。找不到让它工作的方法。

4

2 回答 2

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

在此处查看小提琴。

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

在这里看到它。

于 2013-02-28T11:43:55.060 回答
0
SELECT
  b1.Bagid
FROM 
    bags as b1
JOIN
    bags b2
ON
    b1.Bagid=b2.Bagid
    AND b2.Object='perfume' 
WHERE
    b1.Object = 'wallet'

拥有这样的索引可以让我对 MySQL 的EXPLAIN EXTENDEDKEY idx1(Object,Bagid)给出合理Using where; Using index且没有警告。

于 2013-02-28T12:16:55.417 回答