2012-02-28 30 views
1

我有一個腳本,它非常適合以逗號分隔的值保存用戶到MySQL'reserve'字段。從MySQL中保存的Php Comma分隔值數組中刪除一個值

例如,「510,465,8552」

然後我有低於回聲從逗號的用戶名分隔的「儲備」領域的腳本。 我一直在努力的一點是能夠點擊其中一個用戶旁邊的刪除圖像,它會從逗號分隔值中刪除用戶標識。

$entries = get_records_sql ("SELECT * FROM development ORDER BY pdorder ASC"); 
    foreach($entries as $lesson) { 

    $waiting = explode(",", $lesson->reserve); 
    foreach($waiting as $unlucky) { 
    $reserveuser = get_record("user", "id", $unlucky); 

    if($reserveuser->id>1){ 
echo '<li id="lstno'.$lesson->id.'" name="'.$reserveuser->id.'">'.$reserveuser->firstname.'&nbsp;'.$reserveuser->lastname.' '; 
echo '<a href="removereserve.php?id='.$lesson->id.'&reserve='.$reserveuser->id.'"><img title="unenrol" src="delete.gif" /></a>'; 
     echo '</li>'; 
     } 
    } 

任何指導將非常感謝,在此先感謝。

+2

你爲什麼要存儲用戶ID?無論如何,只需獲取記錄並使用字符串操作來刪除子字符串並用新值更新數據庫 – scibuff 2012-02-28 12:00:32

+1

爆炸後,您可以取消設置想要刪除的數組部分,然後再次將數組再次插入到字符串中並更新數據庫與新字符串 – Sondre 2012-02-28 12:03:05

回答

4

好了,如果所有的用戶ID的被保存在一個領域我的辦法是這樣的http://codepad.org/KTAJ3ROb

希望幫助想出來的!

+0

這包含一些錯誤,嘗試使用不存在於列表中的值,它將刪除第一個。 ??你應該首先使用in_array來檢查那麼只有unset()。 – 2013-08-07 03:36:13

1

這可能是不好的數據庫設計,除非你知道你在做什麼。

刪除一個值的一種方法是讀取整個單元格,使用php刪除它並將其寫回。

​​

如果以逗號分隔的ID是唯一的(你沒有發言權,20,11 ),那麼你可以使用MySQL REPLACE功能。

mysql_query("UPDATE table SET 
reserve=REPLACE(reserve, ',$oldid', ',$newid'), 
reserve=REPLACE(reserve, '$oldid,', '$newid,')"); 

有一個小訣竅,特別是處理第一個和最後一個值。

+0

什麼是「錯誤的數據庫設計」?如果引用完整性不如逗號seperatetd列表重要,那麼避免「join」並加快db-query可能是一種好方法。還有一些數據庫(No-SQL)不支持參照完整性... – user1027167 2012-02-28 12:16:30

+1

我更新爲「可能」。 – 2012-02-28 12:18:45

0

如果你想直接使其在SQL(MySQL的),那麼你可以做這樣的:

UPDATE ... SET USERS = TRIM(REPLACE(' ' + USERS + ' ', ' 7 ', ' ')) 

這將刪除用戶的ID 7.分離器是不是一個「」但一個''(空白)。問題是,在TRIM()的開始或結尾處沒有刪除','的空白功能。

或者您必須始終接受領導和用戶的場拖尾「」做這樣的:在一個逗號分隔的字段

UPDATE ... SET USERS = REPLACE(USERS, ',7,', ',') 
+0

-1:什麼? – user1027167 2012-02-28 12:42:34

+0

我很困惑,爲什麼這得到了一個反對票。這對我來說非常合適!非常感謝,正是我一直在尋找的。 – 2014-02-02 03:45:06