我希望创建一个查询,它将返回多少个时间字段具有相同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]给了我正确的对象。无法找到让它发挥作用的方法。
答案 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。