【发布时间】:2019-11-03 09:07:25
【问题描述】:
所以我最近开始使用 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)
所以这是我为卖家拥有的每件物品及其价值创建的新表格。
现在如果用户搜索项目 3,4 ... 它应该显示 seller1 AND seller2
如果搜索 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();
所以这个查询给了我两个卖家,我怎样才能确保它只返回拥有传递数组 items 中所有商品的卖家?
编辑:我试过了
$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
【问题讨论】:
-
请查询 $sql = "SELECT * FROM Selleritems WHERE item_id IN(item2, item3) AND value =>0 group by sell_id"; $this->db->query($sql);
-
我对这个问题感到困惑 -,'我如何确保它只返回拥有所有物品的卖家' -'如果用户搜索物品 3,4 ......它应该显示卖家 1 AND 卖家 2' - 卖家 2 没有商品 3,为什么卖家 2 会出现在您的结果集中?
-
你能添加你想要的输出吗 - 我不清楚你是否只想要具有规定项目的行、卖家的所有行还是只想要卖家 ID。
-
@MaheshBhatnagar 谢谢我试过了,**query1= tiem_id IN (1) ... 返回 (1,3,6,7) query2= tiem_id IN (2) ... 返回 (2 ,4,6,8) .... 所以 Query3=tiem_id IN ( 1 , 2) 返回 (1,2,3,4,6,7,8) 但它应该返回 (6) **。因为只有卖家 6 有这两种物品
-
@P.Salmon 请查看我的最后评论
标签: php mysql sql codeigniter