Ошибка в подсчете страновых записей и без учета стран? - PullRequest
0 голосов
/ 07 сентября 2018

Из следующего запроса я хочу подсчитать все страны, которые зарегистрированы с помощью ссылочного кода, который я назвал 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 голосов
/ 07 сентября 2018

Исходя из имен полей, используемых во втором запросе, ваш первый запрос, вероятно, должен выглядеть следующим образом:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...