0

我不知道帖子的标题是否合适。我有下表

在此处输入图像描述

和一个包含一些项目的 php 数组,parsed_array. 我想要做的是找到所有具有parsed_array.

例如,如果parsed_array包含[111,121,131]我希望结果21是包含所有这些项目的超市的 ID。

我试着这样做:

$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是正确的,因为上面等于

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

但是如果有多个项目,比如说两个,则等于

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

这当然会返回一个空表。知道如何解决吗?

4

3 回答 3

2

至少有两种方法可以生成您想要的结果,一种是自连接(使用动态数量的项目生成没有乐趣)或使用IN,GROUP BYHAVING.

我真的不能告诉你如何使用 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 回答
1

您可以where_in在 codeigniter 中使用,如下所示,

if(count($parsed_array) > 0)
{
    $this->db->where_in('ItemID', $parsed_array);
}

codeigniter 中的活动记录类

于 2013-05-04T13:09:04.887 回答
0

尝试一个 IN 子句或多个 OR:

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