在sql和codeigniter中查询和存储数组

问题描述 投票:0回答:1

因此,我最近开始使用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

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

php mysql sql codeigniter
1个回答
0
投票

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

$items = array(item2,item3); // item_ids
$item_count = count($items);
$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(seller_id)', $item_count);
        $query = $this->db->get();
© www.soinside.com 2019 - 2024. All rights reserved.