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

在编码的所有方面中,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字段将其记录在产品数据中.

解决方法:

有点丑陋,但是可以解决问题:

create temporary table t (id integer);

insert into t(id) values (1),(1),(2),(2),(3);

select product_id, product_name,price from t inner join products where t.id = products.id;

drop table t;

标签:sql,mysql,php

来源: https://codeday.me/bug/20191122/2063168.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值