具有多个AND的Sql语句查询同一列

时间:2013-05-04 12:37:35

标签: sql codeigniter

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

enter image description here

和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];

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

3 个答案:

答案 0 :(得分:2)

至少有两种方法可以生成您想要的结果,要么是自我加入(使用动态数量的项目生成没有乐趣),要么使用INGROUP BY和{{1} }。

我无法告诉你如何使用CodeIgniter生成它,我认为你比我更擅长:)

HAVING

An SQLfiddle to test with

编辑:正如@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);
}

Active record class in codeigniter

答案 2 :(得分:0)

尝试IN子句或多个OR:

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