sql/php返回有多少时间字段具有相同的ID的计数
我期待创建一个查询,它将返回有多少时间字段具有相同的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]给我正确的对象,当我回应他们。无法找到一种方法来实现它的工作。
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。
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
,没有报警。
要试一试。干杯 – StringerB 2013-02-28 12:51:00
'B2&B3'中常见的'(笔,钱包)'如何? – SparKot 2013-02-28 11:53:05
感谢这样一个快速回复,顶部小屋 – StringerB 2013-02-28 11:55:39
@DoSparKot是它可能已经2(以及笔(钱包)),这只是一个例子 – StringerB 2013-02-28 11:58:23