【发布时间】:2021-05-14 02:44:22
【问题描述】:
我在 SQL Server 中有如下表:
+--------------+----------------------------------------------+
| reportName | ShareWith |
+--------------+----------------------------------------------+
| IBM SH data | jack@gmail.com,alex@gmail.com,jan@gmail.com |
| Samsung Sr | alex@gmail.com,peter@gmail.com |
| Xiaomi MFG | |
| Apple US st | maria@gmail.com,alex@gmail.com |
| LG EU | fred@gmail.com |
+--------------+----------------------------------------------+
在我的 php 文件中,我有一个输入文本和一个按钮。当用户键入报告名称并单击按钮时,tt 将执行 ajax 调用以从所选报告中删除当前用户的电子邮件。
在 SQL 中应该如下:
select shareWith, UpdatedshareWith =
case
when shareWith like 'alex@gmail.com,%' then REPLACE(shareWith, 'alex@gmail.com,', '')
when shareWith like '%,alex@gmail.com,%' then REPLACE(shareWith, ',alex@gmail.com,', ',')
when shareWith like '%,alex@gmail.com' then REPLACE(shareWith, ',alex@gmail.com', '')
when shareWith = 'alex@gmail.com' then ''
else shareWith
end
from table
where reportName = 'xxxx';
我正在尝试在 PHP 中动态应用它,但无法使其工作。
$('#button').on('click', function(){
var reportName = x;
var username = y;
$.ajax({
type: "POST",
url: "delete.php",
data: { reportName : reportName,
username : username },
success: function(data) { console.log(data); }
});
});
和delete.php如下:
$stmt = $conn->prepare("UPDATE table SET shareWith = CASE
WHEN shareWith like '?,%' THEN REPLACE(shareWith, '?,', '')
WHEN shareWith like '%,?,%' THEN REPLACE(shareWith, ',?,', ',')
WHEN shareWith like '%,?' THEN REPLACE(shareWith, ',?', '')
ELSE shareWith
END
WHERE reportName = ?");
$stmt->execute([$_POST['username'], $_POST['username'], $_POST['username'],
$_POST['username'], $_POST['username'], $_POST['username'], $_POST['reportName']]);
echo json_encode('deleted');
我相信有一种更清洁的方法可以做到这一点。任何建议请我应该在我的代码中更改什么?非常感谢。
【问题讨论】:
-
感谢您的评论。我知道这是一种不好的做法,但该表是由另一个团队创建的,他们以这种方式使用它,我无法更改。
-
SQL Server 版本是多少?
-
@Zhorov SQL Server 2012 版本 11.0
-
@DevTN,如果您使用的是 SQL Server 2017+,一个可能的选项是使用
STRING_SPLIT()拆分ShareWith列,然后使用STRING_AGG()再次聚合结果。请注意,TRIM()也在 SQL Server 2017 中引入,因此您需要更改@Gordon Linoff 答案中的代码。
标签: php jquery sql sql-server ajax