php - 使用 WHERE 子句检查记录是否接收不同的值

标签 php mysql sql pdo

我想检查具有给定主键的数据库记录中的一堆值是否与某些用户提供的值不同。

一种方法是从数据库中检索值并使用 PHP 将它们与用户提供的值进行比较。

另一种方法是直接使用DB来比较值,如果返回一条记录,就知道是完全匹配的:

SELECT COUNT(*)
FROM t
WHERE pk=123
AND c1=321
AND c2=222
...
AND c8=555
AND c9=434;

使用一种方法优于另一种方法有什么优点或缺点吗?数据库是否足够聪明,可以在其他值之前过滤 pk?

附言。基于此查询,如果发生更改,我将更新新值并更新 date_changed 列和 changed_by_user 列。由于我也在更新最后两列,因此无法使用 PDOStatement::rowCount()。我错过了什么吗?

最佳答案

Is there any pros or cons from using one approach over the other? Will the DB be smart enough to filter on the pk before the other values?

您绝对应该在查询中这样做。 DBMS 足够聪明,可以识别 where 子句中的 pk 字段,实际上它会在处理之前进行查询优化和 where 子句重新排序。此属性是设计使然和基础 datastructures旨在像那样工作。

关于php - 使用 WHERE 子句检查记录是否接收不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20443529/

相关文章:

php - 检查 WooCommerce 用户角色和支付网关,如果它们匹配 - 申请费用

PHP MySql 循环遍历所有子 ID

MySQL SUM 每个类别的前 2 条记录

mysql - 加入选定的列

php - cakephp 使用 mysql SQL_CALC_FOUND_ROWS 分页

sql - 动态sql脚本生成删除表语句列表

php - 有效图像位置不显示图像

mysql - 将 ID 链接到表 SQL 中的其他 ID

多条语句的 PHP oci_execute

php - 如何使用 Jquery/PHP 实现聊天室?