棘手的MySQL插入和更新

问题描述:

我正在为我的网站做一个购物车。
当用户将东西添加到购物车时,它应该将item_id和数量插入到我的数据库中的项目列中。
物品栏应该持有这样的字符串:棘手的MySQL插入和更新

1:5;6:2;13:1 

ITEM_ID:数量; ITEM_ID:数量等

插入部分我已经得到了,但是当用户想要查看的车,字符串需要被分成数组,并从另一个表中提取的项目

阵列例如:

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

心中已经TR ied使用spliti(“;”$ raw);
但没有得到我想要的。

而用户从购物车更新/删除产品时也是这样。
当用户更新/删除产品时,必须搜索产品内部的字符串并查找产品的当前位置。

任何帮助将

+4

请重新考虑你的数据模型 - 存储“1:5; 6:2; 13:1”中的表保证给你在您尝试访问/修改您的数据时,将来会遇到很多令人头痛的问题。 – 2011-04-13 10:57:27

+1

请不要在标题中写下“[PHP] [MySQL]”。这就是标签的用途。 – 2011-04-13 10:57:59

既然你正在构建自己的车做正确使用适当的规范化模式可以理解的:)。这意味着你需要避免同时做超过1件事的“特殊”值。

所以这里的明显的改进是有:

table users: 
    id 
    ... 

table products: 
    id 
    ... 

table cart_items: 
    user_id 
    product_id 
    quantity 

CRUD查询将实现然后也非常快非常简单。

+0

谢谢,之前曾经这样做过,只是想以另一种方式尝试。 – NoobiCake 2011-04-13 11:29:20

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

最好是有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]; 
}