我有一个脚本,它非常适合将逗号分隔值中的用户保存到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.' '.$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,', ',')