php in条件,PHP-使用“ in”条件检索repeatin结果

博客讲述了在使用SQL查询购物车数据时遇到的问题,即如何获取重复的商品信息。当前方案将商品ID以逗号分隔的形式存储在`cart`表的`products`字段中,导致查询只返回唯一产品。作者寻求一个SQL语句,能够返回购物车中每个商品的重复项。解决方案是创建一个单独的`cart_list`表来存储每个购物车条目,以实现数据规范化。
摘要由CSDN通过智能技术生成

在编码的所有方面中,SQL是我最薄弱的技能,所以如果我听起来不知道我在说什么,请原谅我,因为我可能不知道!

情况:

构建一个购物车,其中名为“ cart”的表具有一个类型为VARCHAR 255的名为“ products”的字段,并且“ products”的值将是一个逗号分隔的字符串.字符串的每个元素都是一个数字,代表“产品”表中产品的ID.

客户的记录可能在“产品”字段中包含一个值,看起来像1,1,1,2,3.这意味着客户已添加了三个项目1,一个项目2,一个项目3.

问题:

因此,这是我目前拥有的sql语句,但是问题是我需要一个sql语句,该语句将返回product表中的重复产品数据:

SELECT product_id, product_name,price

FROM products

WHERE id in ('1','1','1','2','3')

结果将是“产品”表中的三个项目的集合1、2和3.换句话说,它不会给我三个“ 1”的产品数据,只会给我一个独特的价值.不是products表中的3个值,而是products表中的5个值,前三个结果相同,因为它们是相同的product_id = 1.

我需要一条sql语句,该语句将为我提供冗余的产品信息,因为毕竟,一个人可以订购三个具有product_id = 1的小部件.

大车:

id INT(15)

uid VARCHAR(32)

email VARCHAR(100)

products VARCHAR(255)

date DATETIME

checkout TINYINT(1)

产品:

id INT(15)

product_id varchar(32)

product_name varchar(128)

product_associations varchar(255)

short_description varchar(255)

long_description mediumtext

price varchar(32)

image varchar(128)

我的PHP代码:

$productslist = str_replace(",","','",$row->products);

$productslist = "'" . $productslist . "'"; echo $productslist;

$sql2 = "SELECT product_id, product_name,price FROM products WHERE id in ($productslist)";

$query2 = $this->db->query($sql2);

$i = 0;

if ($query2->num_rows() > 0){

foreach ($query2->result() as $row2){

$products[$i]['product_id'] = $row2->product_id;

$products[$i]['product_name'] = $row2->product_name;

$products[$i]['price'] = $row2->price;

$i++;

}

}

…此查询的结果将是:

Product ID: #0001

Product Name: "Ducky"

Price: $1.50

Product ID: #0002

Product Name: "Horse"

Price: $1499.00

Product ID: #0003

Product Name: "T-shirt"

Price: $5.00

更新:

为了最佳实践,我研究了“规范化”表理论,然后回滚了逗号分隔产品领域的上述方案.我创建了一个单独的表“ cart_list”,其中包含以下字段:

id

cart_id

product_id

…我只是为每个新的“添加到购物车”插入新记录,通过cart_id字段将其记录在购物车表中,并通过product_id字段将其记录在产品数据中.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值