从MySQL中保存的Php逗号分隔值数组中删除一个值


Delete a value from Php Comma seperated value array saved in MySQL

我有一个脚本,它非常适合将逗号分隔值中的用户保存到MySQL的"reserve"字段中。

例如'5104658552'

然后我有了下面的脚本,它从逗号分隔的"保留"字段中回声用户名。我正在努力的一点是,能够点击其中一个用户旁边的删除图像,它将从逗号分隔的值中删除用户id。

    $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>';
        }
    }

任何指导都将不胜感激,提前表示感谢。

好吧,如果所有的用户id都保存在一个字段中,我的方法是这样的http://codepad.org/KTAJ3ROb

希望这有助于解决问题!

这可能是糟糕的数据库设计,除非您知道自己在做什么。

只删除一个值的一种方法是读取整个单元格,用php将其删除并写回。

$waiting = explode(",", $lesson->reserve);
//delete desired one
unset($waiting[3]);
//implode it back
$store = implode(',', $waiting);
mysql_query("UPDATE table SET reserve='$store'");

如果逗号分隔的ID是唯一的(您不必说11,20,11),那么您可以使用mysql REPLACE函数。

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

有一个小技巧涉及到专门处理第一个和最后一个值。

如果你想直接在SQL(MySQL)中创建它,那么你可以这样做:

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

这将删除ID为7的用户。分隔符不是",",而是"(空白)。问题是,没有一个函数可以像TRIM()那样删除开头或结尾的","。

或者你必须在USERS字段中始终接受一个前导和尾随","并这样做:

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