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


using WHERE clause to check if record is receiving different values

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

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

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

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

使用一种方法比使用另一种方法有什么优点或缺点吗?DB是否足够聪明,可以在其他值之前对pk进行筛选?

PS。基于这个查询,如果发生了更改,我将对新值进行UPDATE,并更新date_changed列和changed_by_user列。由于我也在更新最后两列,所以不能使用PDOStatement::rowCount()。我是不是错过了什么?

使用一种方法比使用另一种方法有什么优点或缺点吗?将DB是否足够聪明,可以在其他值之前对pk进行筛选?

您肯定应该在查询中执行此操作。DBMS足够聪明,可以识别where子句中的pk字段,事实上,它会在处理之前进行查询优化和where子句的重新排序。这个属性是经过设计的,底层数据结构就是这样设计的。