从以下查询中,我想计算通过参考代码注册的所有国家/地区,我将其称为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
答案 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)