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

时间:2013-12-07 16:14:35

标签: php mysql sql pdo

我希望检查具有给定主键的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。基于此查询,如果更改了某些内容,我将对新值进行更新,并更新date_changed列和changed_by_user列。由于我也在更新最后两列,因此无法使用PDOStatement::rowCount()。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

  

使用一种方法优于另一种方法是否有任何利弊?将   DB是否足够聪明,可以在其他值之前过滤pk?

您绝对应该在查询中执行此操作。 DBMS足够智能识别where子句中的pk字段,实际上它将在处理之前进行查询优化和where子句重新排序。此属性是设计使然,基础datastructures的设计就是这样。