在SQL和Codeigniter中查询和存储数组

时间:2019-11-03 09:07:25

标签: php mysql sql codeigniter

所以我最近开始使用PHP CodeIgniter和SQL查询,我想获取所有拥有用户正在搜索的选定商品的卖家,因此仅显示拥有[item1,item2...]

的卖家。

方法1(由于sql无法存储数组而无法使用) 在卖方表格中存储一系列商品

seller1.allItems = [1,2,3,4,5]
seller2.allItems = [3,4,5,6]

因此,如果用户搜索项目3,4 ...,则应显示seller1seller2 (因为SQL无法存储数组,所以无效)

方法2 ..创建新表

INSERT INTO `selleritems` (`id`, `seller_id`, `item_id`, `value`) VALUES
    (1, seller1, 1, 22),
    (2, seller1, 2, 22),
    (3, seller1, 3, 22),
    (4, seller1, 4, 22),
    (5, seller1, 5, 22),
    (6, seller2, 6, 22),
    (7, seller2, 7, 22),
    (8, seller2, 4, 22),
    (9, seller2, 5, 22)

这是我为卖家拥有的每个商品及其价值创建的新表格。

现在,如果用户搜索项目3,4 ...,它应该显示seller1seller2

并且如果搜索item2,3 ...仅显示seller 1

查询部分(这是我需要的帮助)

$this->db->from('selleritems');
        $this->db->where_in('item_id', array(item2,item3) );
        $this->db->where('value >', 0);
        $query = $this->db->get();

所以此查询给了我两个卖家,我如何确保它只返回拥有传递的数组商品中所有商品的卖家?

编辑:我尝试过

    $sql = "SELECT * FROM selleritems WHERE item_id IN ( 1 ) AND value > 0 group by seller_id"; 
    returns (seller1)

$sql = "SELECT * FROM selleritems WHERE item_id IN ( 4 ) AND value > 0 group by seller_id"; 
    returns (seller1,seller2)

$sql = "SELECT * FROM selleritems WHERE item_id IN ( 1 , 4 ) AND value > 0 group by seller_id"; 
    returns (seller1,seller2)
BUT it should only return (seller1) because seller 1 has both items while seller2 only has item4 not item1

1 个答案:

答案 0 :(得分:0)

您可以使用GROUP BYHAVINGseller_id行数与项目数进行匹配:

$items = array(item2, item3); // item_ids
$item_count = count($items);
$this->db->select('*, count(id) count_ids');
$this->db->from('selleritems');
$this->db->where_in('item_id', $items);
$this->db->where('value >', 0);
$this->db->group_by('seller_id');
$this->db->having('count_ids', $item_count);
$query = $this->db->get();