2011-04-13 52 views
0

我正在爲我的網站做一個購物車。
當用戶將東西添加到購物車時,它應該將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

回答

4

既然你正在構建自己的車做正確使用適當的規範化模式可以理解的:)。這意味着你需要避免同時做超過1件事的「特殊」值。

所以這裏的明顯的改進是有:

table users: 
    id 
    ... 

table products: 
    id 
    ... 

table cart_items: 
    user_id 
    product_id 
    quantity 

CRUD查詢將實現然後也非常快非常簡單。

+0

謝謝,之前曾經這樣做過,只是想以另一種方式嘗試。 – NoobiCake 2011-04-13 11:29:20

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]; 
}