为了账号安全,请及时绑定邮箱和手机立即绑定

如何在具有相同 ID 的列中选择不同的值,然后删除它们 PHP SQL Server

如何在具有相同 ID 的列中选择不同的值,然后删除它们 PHP SQL Server

PHP
哔哔one 2023-04-28 14:42:00
我是编程世界的新手。这句话我需要帮助。我想要做的是从 CardIndex 列中选择 0.1,2 值,然后能够删除它们。只要满足条件,就必须删除行。或者最好的方法是什么。CardIndex 列必须具有 3 个值 yes 或 yes 才能执行删除。否则不执行$query = "SELECT * FROM CardData where UserIndex='$id' and CardIndex in (0,1,2) ";$resultados = sqlsrv_query($conn,$query);if($query1 = sqlsrv_fetch_array($resultados)){        if($query1 == true){        $cro =  "DELETE FROM CardData WHERE UserIndex='$id' and CardIndex in (0,1,2)";        $query3 = sqlsrv_query($conn,$cro);         }    echo 'funciona';    }    else{     echo 'no funciona';    }?>
查看完整描述

1 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

你想要or,而不是and- 否则你会搜索CardIndex同时具有所有三个值的行,这显然永远不会发生:


DELETE FROM CardData 

WHERE 

    UserIndex = @UserIndex

    AND (CardIndex = 1 OR CardIndex = 2 OR CardIndex = 3)

这可以缩短为IN:


DELETE FROM CardData 

WHERE UserIndex = @UserIndex AND CardIndex IN (1, 2, 3)

SELECT请注意,在删除值之前没有意义。您可以直接触发DELETE:如果没有行符合条件,则不会发生实际删除。


最后:不要在查询字符串中连接变量;这是低效的,并且会将您的代码暴露给 SQL 注入。相反,您应该使用参数化查询(有大量在线资源可以解释如何做到这一点)。


编辑


cardIndex仅当给定的所有三个值都可用时,您才想删除所有三个记录userIndex。假设没有重复项(userIndex, cardIndex),一种方法是可更新的 CTE:


with cte as (

    select count(*) over() cnt

    from cardData

    where userIndex = @UserIndex and cardIndex in (1, 2, 3)

)

delete from cte where cnt = 3


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 170 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信