0

投稿のタイトルが適切かどうかはわかりません。私は次の表を持っています

ここに画像の説明を入力

そして、いくつかのアイテムを含む php の配列parsed_array. 私がやりたいことは、のすべてのアイテムを持つすべての SupermarketIDs を見つけることですparsed_array

たとえば、parsed_arraycontainsの場合、これらすべてのアイテムを含むスーパーマーケットの ID を[111,121,131]結果として取得したいと考えています。21

私はそのようにしようとしました:

$this->db->select('SupermarketID'); 
$this->db->from('productinsupermarket');
for ($i=0; $i<sizeof($parsed_array); $i++)
    {
      $this->db->where('ItemID', $parsed_array[$i]);
    }
$query = $this->db->get();
return $query->result_array();

parsed_array上記が等しいため、結果にアイテムが1つしかない場合は正しいです

SELECT SupermarketID 
FROM productinsupermarket
WHERE ItemID=parsed_array[0];

ただし、アイテムが複数ある場合、たとえば 2 つとすれば、次のようになります。

SELECT SupermarketID 
FROM productinsupermarket
WHERE ItemID=parsed_array[0]
AND ItemID=parsed_array[1];

もちろん、空のテーブルを返します。これをどのように解決できますか?

4

3 に答える 3

2

必要な結果を生成するには、少なくとも 2 つの方法があります。自己結合 (動的な数のアイテムで生成するのは面白くありません) かINGROUP BYとを使用しHAVINGます。

CodeIgniter を使用してそれを生成する方法を実際に説明することはできませんが、私よりも優れていると思います :)

SELECT SupermarketID 
FROM productinsupermarket
WHERE ItemID IN (111,121,131)       -- The 3 item id's you're looking for
GROUP BY SupermarketID
HAVING COUNT(ItemId) = 3;           -- All 3 must match

でテストする SQLfiddle

編集: 以下で @ypercube が言及しているように、ItemId が SupermarketID に対して複数回表示される可能性がある場合は、COUNT(DISTINCT ItemId)すべての出現をカウントするのではなく、一意の行のみをカウントするために使用する必要があります。

于 2013-05-04T12:44:44.890 に答える
0

IN 句または複数の OR を試してください。

SELECT SupermarketID 
FROM productinsupermarket
WHERE ItemID=parsed_array[0]
OR ItemID=parsed_array[1];
于 2013-05-04T12:44:24.497 に答える