wat*_*zon 5 php mysql sql database
我的MySQL数据库中有一个名为'children'的表.在该表中有一行称为"愿望"(孩子的愿望清单项目的逗号分隔列表).我需要能够更新该列表,以便它只删除一个值.即清单= 12号普通牛仔裤,冲浪板,红袜棒球帽; 我想删除Surfboard.
我现在的查询看起来像这样
$select = mysql_query('SELECT * FROM children WHERE caseNumber="'.$caseNum.'" LIMIT 1 ');
$row = mysql_fetch_array($select);
foreach ($wish as $w) {
$allWishes = $row['wishes'];
$newWishes = str_replace($w, '', $allWishes);
$update = mysql_query("UPDATE children SET wishes='$newWishes' WHERE caseNum='".$caseNum."'");
}
Run Code Online (Sandbox Code Playgroud)
但UPDATE查询不会删除任何内容.我该怎么做我需要的东西?
使用这些用户定义的REGEXP_REPLACE()函数,您可以将其替换为空字符串:
UPDATE children SET wishes = REGEXP_REPLACE(wishes, '(,(\s)?)?Surfboard', '') WHERE caseNum='whatever';
Run Code Online (Sandbox Code Playgroud)
不幸的是,您不能只使用普通旧的REPLACE(),因为您不知道字符串“Surfboard”出现在哪里。事实上,如果“Surfboard”出现在开头或结尾,上面的正则表达式可能需要额外的调整。
也许您可以像这样删除剩余的前导和尾随逗号:
UPDATE children SET wishes = TRIM(BOTH ',' FROM REGEXP_REPLACE(wishes, '(,(\s)?)?Surfboard', '')) WHERE caseNum='whatever';
Run Code Online (Sandbox Code Playgroud)
那么这是怎么回事呢?正则表达式删除“Surfboard”以及前面的可选逗号和空格。TRIM()然后,如果“Surfboard”出现在字符串开头,则周围函数会消除可能的前导逗号。这也可能由正则表达式来处理,但坦率地说,我太累了,无法解决这个问题。
请注意,我自己从未使用过这些,也不能保证它们的有效性或稳健性,但这是一个起点。而且,正如其他人在评论中提到的那样,您确实应该将它们放在规范化的愿望清单表中,而不是作为逗号分隔的字符串。
更新
考虑更多这一点,我更偏向于强制使用内置REPLACE(),然后清除多余的逗号,其中可能会连续出现两个逗号。这是并排查找两个逗号,就好像原始列表项之间没有空格一样。如果项目已用逗号和空格分隔,请在外部调用中更改',,'为。', ,'REPLACE()
UPDATE children SET wishes = TRIM(BOTH ',' FROM REPLACE(REPLACE(wishes, 'Surfboard', ''), ',,', ',')) WHERE caseNum='whatever';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4157 次 |
| 最近记录: |