gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:31:41 26 4
gpt4 key购买 nike

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

方法1(不起作用,因为sql无法存储数组)在卖家表中存储一系列商品

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

因此,如果用户搜索商品 3,4 ...它应该显示 seller1 AND seller2(不起作用,因为 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)

这是我为卖家拥有的每件商品及其值(value)创建的新表。

现在,如果用户搜索商品 3,4 ...它应该显示 seller1 AND seller2

如果搜索 item2,3.. 仅显示卖家 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

最佳答案

您可以使用 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();

关于php - 在sql和codeigniter中查询和存储数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58678731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com