2012-02-28 70 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