2013-02-28 3 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 개의 객체에 대해이 작업을 수행하고 싶습니다 (하지만 이후).

감사합니다. 감사드립니다.


새로운 질문 :

내가 객체를 포함하는 2 차원 배열을 사용하여, IN()에 있어야 개체를 넣을 수있는 방법. 예를 들어 ... IN ('$ Objects [1] [0]', '$ Object [1] [1]')이 작동하지 않습니다. Objects [1] [0] & Object [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

+0

그런 빠른 답장을 해주셔서 고마워요. – StringerB

+0

@DoSparKot 예 (펜, 지갑)도 2 일 수있었습니다. 그냥 예일뿐입니다 – StringerB

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

관련 문제