棘手的MySQL插入和更新

时间:2011-04-13 10:55:45

标签: php mysql

我正在为我的网站制作购物车 当用户在购物车中添加内容时,应将item_id和数量插入到我的数据库的items列中 item列应该包含如下字符串:

1:5;6:2;13:1

item_id:数量; item_id:数量等

我已经获得了插入部分,但是当用户想要查看购物车时,需要将字符串拆分为数组并从另一个表中获取项目

数组示例:

1 => 5,
6 => 2,
13 = 1

我尝试使用spliti(“;”$ raw);
但没有得到我想要的东西。

当用户从购物车更新/删除产品时也是如此 当用户更新/删除产品时,它必须搜索项目中的字符串并找到产品的当前位置。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:4)

由于您正在构建自己的购物车,因此请使用正确规范化的架构正确完成。这意味着您需要避免同时执行多个操作的“特殊”值。

所以这里显而易见的改进是:

table users:
    id
    ...

table products:
    id
    ...

table cart_items:
    user_id
    product_id
    quantity

CRUD查询实现起来非常简单,也非常快。

答案 1 :(得分:0)

首先,我认为在您的订单/购物车表中将您的商品作为字符串不是一个好主意。你以这种方式遇到很多问题(你已经碰到了一对)。

最好有hasMany关系。下面所示的设计之类的东西是理想的。

Order Table : id, date, total, more, fields
OrderItem Table : id, order_id, item_id, value, more, fields //item_id is a ref to your Items/Product table 

这使您可以正确地将商品与订单相关联,并且可以毫无问题地进行插入和更新。

至于您当前的问题,您需要将其拆分两次

$items = 1:5;6:2;13:1;
$items_arr = explode(';', $itemrs);
$new_items = array();
foreach ($iterms_arr as $item) {
  $pieces = explode(':', $item);
  //might want to do some error checking on whether the indices exist
  $new_items[$pieces[0]] = $pieces[1];
}