У меня есть 3 записи в моей базе данных (для целей тестирования), и я использую SQL_CALC_FOUND_ROWS, чтобы возвращать число строк вместе с LIMIT для сбора разбитых на страницы результатов.MySQL Found_Rows() Возвращает Double the Correct Value
SELECT SQL_CALC_FOUND_ROWS * FROM contacts WHERE contacts.organizationId = :organizationId LIMIT 0, 1
Я использую Spring, чтобы сделать мой бизнес-логин базы данных так.
public List<Contact> findAll(int organizationId, int rowStart, int rowAmount, final boolean deep) {
final HashMap<String, Object> namedParameters = new HashMap<String, Object>();
namedParameters.put("organizationId", String.valueOf(organizationId));
namedParameters.put("rowStart", rowStart);
namedParameters.put("rowAmount", rowAmount);
final NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(dataSource);
TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
List<Contact> contactList = transactionTemplate.execute(new TransactionCallback<List<Contact>>() {
@Override
public List<Contact> doInTransaction(TransactionStatus status) {
SqlRowSet result = namedParameterJdbcTemplate.queryForRowSet(SQL_FIND_ALL_BY_ORGANIZATION_ID, namedParameters);
int count = namedParameterJdbcTemplate.queryForInt("SELECT FOUND_ROWS()", (HashMap<String, ?>) null);
System.out.println(count);
List<Contact> contactList = mapContact(result, deep);
if(contactList.size() > 0) {
return contactList;
} else {
return null;
}
}
});
return contactList;
}
Независимо от того, что я делаю, счет не возвращается в 6, когда я только 3 строки в таблице. Фактически, он возвращает 6 независимо от количества строк в наборе результатов. Почему удвоение числа, что я делаю неправильно?
UPDATE
Я закончил с использованием этого:
int count = namedParameterJdbcTemplate.queryForInt("SELECT Count(*) FROM contacts WHERE contacts.organizationId = :organizationId", namedParameters);
В основном так же, как я делал раньше, но SQL немного изменилось. Теперь я использую count, а не SQL_CALC, который, по моему мнению, приводит к двум отдельным запросам, но с Spring это единственный способ.