在计算国家记录而不包括国家时出错?

时间:2018-09-07 05:05:54

标签: php mysqli

从以下查询中,我想计算通过参考代码注册的所有国家/地区,我将其称为coderegister(美国国家/地区除外)。

$Not_Us_code = "US";
$Not_Us_name = "United States";
$stmt=$con->prepare("SELECT COUNT(*) FROM country WHERE coderegister=? NOT IN (?,?)");
$stmt->bind_param("sss",$coderegister,$Not_Us_code,$Not_Us_name);
$stmt->execute();
$counted = null;
$stmt->bind_result($counted);
$stmt->fetch();
$stmt->close()

这里的问题是,当有记录时,它显示0个结果。

现在,我以同样的方式来计算此次通过参考代码注册的国家/地区的计数,该计数应该仅计算美国的国家/地区

$country_code = "US";
$country_name = "United States";
$stmt1=$con->prepare("SELECT COUNT(*) FROM country WHERE coderegister=? AND country_code=? OR country_name=?");
$stmt1->bind_param("sss",$coderegister,$country_code,$country_name);
$stmt1->execute();
$counted_1 = null;
$stmt1->bind_result($counted_1);
$stmt1->fetch();
$stmt1->close();

这里的问题是它告诉我所有记录,并且不遵守参考代码,也就是说,如果有100条记录具有不同的参考代码,则此查询将向我显示100条不应发生的记录(如果仅存在)使用该参考代码的10条记录,您应该只向我显示10条记录。


参考代码为coderegister -> AC1234

1 个答案:

答案 0 :(得分:0)

根据第二个查询中使用的字段名称,第一个查询应该类似于:

SELECT COUNT(*) FROM country WHERE coderegister=? AND country_code!=? AND country_name!=?

,第二个查询应该是:

SELECT COUNT(*) FROM country WHERE coderegister=? AND (country_code=? OR country_name=?)

您当前的第一个查询有语法错误(您没有检查要为NOT IN的字段,而第二个查询有运算符优先级问题(AND发生在OR之前)。

修改

如果country_code和country_name可以为NULL,并且您希望第一个查询返回这些条目,则应将其更改为:

SELECT COUNT(*) FROM country WHERE coderegister=? AND
  (country_code != ? OR country_code IS NULL) AND 
  (country_name != ? OR country_name IS NULL)