2012-07-25 60 views
0
Table 1 - users 

id username items 
1 Paul 1(0020);2(0001); 

Table 2 - items 

id name 
1 name_here 

以我user`s物品i放2(0001)至極emans MYSQL字段修改值:2 =項ID,0001是它 這裏的量是一個函數,顯示我的項目列表在具有多個值(複雜)

function getitems() { 
$username = $_SESSION['user']; 
$connect = mysql_connect("localhost","root","x") or die("Conexiune nereusita!"); 
mysql_select_db("skameron") or die("Baza de date nu exista!"); 
$query = mysql_query("SELECT * FROM users WHERE username='" . $username . "'") or   die(mysql_error()); 
if(mysql_num_rows($query) == 0) { 
     echo "<tr><td colspan=\"3\">Nu ai iteme in inventar!</td></tr>"; 
} else { 
     while($itm = mysql_fetch_assoc($query)) { 
    $str = $itm['items']; 
    $items = preg_split("/;/", $str); 
    foreach ($items as $item){ 

$temp_item = preg_split("/,/", $item); 
if($temp_item){ 
    foreach ($temp_item as $temp_i){ 
    If($temp_i=="") 
    { 
    } 
    else{ 
    $pieces = substr($temp_i, -5, 4); 
    $piecesold = $pieces; 
    $pieces = $pieces/1; 
    //$arrnr = array(0,1,2,3,4,5,6,7,8,9,"(",")"); 
    //$temp_i = str_replace($arrnr,"",$temp_i); 
    $query2 = mysql_query("SELECT * FROM items WHERE id='" . $temp_i . "'") or die(mysql_error()); 
     if(mysql_num_rows($query2) == 0) { 
     echo "<tr><td colspan=\"3\">Nu ai iteme in inventar!</td></tr>"; 
} else { 
     while($itm2 = mysql_fetch_assoc($query2)) { 
     $temp_i = $itm2['name']; 
     $temp_id = $itm2['id']; 
     echo $temp_i . " <a href='items.php?del=". $temp_id."(".$piecesold.")'>Delete all</a>(". $pieces . ")/<a href='items.php?del=". $temp_id."(".$piecesold.")&nr=1'>Delete 1</a><br>"; 
    }}}}} else { 
    echo $item;  
}}}}} 

我做的頁面刪除一個項目,但我不能老是找到一種方法來刪除剛纔的項目數量...例如可以改變:2(0100); 1( 0001);對此:2(0099); 1(0001);

這裏是我的表現如何刪除這樣的價值...

$delitem = $_GET['del']; 
$queryreg = mysql_query("UPDATE users SET items = REPLACE(items, '$delitem;', '');"); 

我可以用這個頁面上刪除像2(0099)的值;和其他人保持... 但我不能老是隻更改項目至極量爲0099/1 = 99

+1

你有一個非常有說服力的理由,你不會將這些信息分成兩個不同的列嗎?爲什麼你要在單個列中存儲一個列表? – hometoast 2012-07-25 14:06:13

+1

任何解決方案,你從那裏** **不涉及重新設計你的桌子將會有根本的缺陷。你真的真的需要規範化設計。 – 2012-07-25 14:24:26

+0

你不能在MySQL中找到這樣做的方法,因爲MySQL不提供這種功能。如果你像這樣存儲你的數據,你將不得不自己處理更新;正如您發現的那樣,當您執行UPDATE時,您需要分配整個列值。您需要的邏輯對於使用內置的MySQL函數來實現將會過於複雜;如果你設法實現它,那麼結果表達式會非常糟糕,破譯它的功能幾乎是不可能的。你的數據設計很糟糕;你需要管理它的代碼也會很糟糕。 – spencer7593 2012-07-25 15:50:16

回答

3

真的應該考慮改變數據的佈局

Table1 - Users 
Id Name 
1 Paul 

Table2 - Items 
Id Name 
1 SomeItem 
2 AnotherItem 

Table3 - UserItems 
UserId ItemId Quantity 
1  1  100 
1  2  99 

現在保羅有100個SomeItem和99個AnotherItem

+0

好吧我會用這種方式
我是新來的,我認爲最好少用幾行:) – 2012-07-25 19:11:02