我不知道帖子的标题是否合适。我有下表
和php中包含一些项parsed_array
的数组。我想要做的是找到所有具有parsed_array
所有项目的超市ID。
例如,如果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];
当然会返回一个空表。不知道如何解决这个问题?
答案 0 :(得分:2)
至少有两种方法可以生成您想要的结果,要么是自我加入(使用动态数量的项目生成没有乐趣),要么使用IN
,GROUP BY
和{{1} }。
我无法告诉你如何使用CodeIgniter生成它,我认为你比我更擅长:)
HAVING
编辑:正如@ypercube在下面提到的那样,如果ItemId可以为SupermarketID显示多次,那么您将需要使用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
来计算唯一的行,而不是计算每次出现的次数。
答案 1 :(得分:1)
您可以在codeigniter中使用where_in
,如下所示,
if(count($parsed_array) > 0)
{
$this->db->where_in('ItemID', $parsed_array);
}
答案 2 :(得分:0)
尝试IN子句或多个OR:
SELECT SupermarketID
FROM productinsupermarket
WHERE ItemID=parsed_array[0]
OR ItemID=parsed_array[1];