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

同じバッグに 2 回表示されるためです。

その後、配列に格納されるn個のオブジェクトに対してこれを実行できるようにしたいと思います(ただし、後で)。

助けていただければ幸いです、ありがとう。


新しい質問:

オブジェクトを含む 2 次元配列を使用して、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のEXPLAINEXTENDEDKEY idx1(Object,Bagid)に関する合理的で警告はありません。Using where; Using index

于 2013-02-28T12:16:55.417 に答える