首页 > 解决方案 > MariaDB:选择计数(*)结合 MATCH AGAINST 返回错误计数

问题描述

我有一个表帐户:

+---------------+---------------------+------+-----+---------+----------------+
| Field         | Type                | Null | Key | Default | Extra          |
+---------------+---------------------+------+-----+---------+----------------+
| id            | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| fullname      | varchar(255)        | NO   | UNI | NULL    |                |
| email         | varchar(255)        | NO   | UNI | NULL    |                |
| created_at    | timestamp           | YES  |     | NULL    |                |
| updated_at    | timestamp           | YES  |     | NULL    |                |
+---------------+---------------------+------+-----+---------+----------------+

该表有 11 个条目,其中 4 个具有包含“Foo”的全名。

但是运行这个查询,结果是 11:

select count(*) as aggregate 
from `accounts` 
where MATCH (fullname) AGAINST ('+foo*' IN BOOLEAN MODE) 
   or `fullname` LIKE '%foo%';

运行时返回 4 行

select * 
from `accounts` 
where MATCH (fullname) AGAINST ('+foo*' IN BOOLEAN MODE) 
   or `fullname` LIKE '%foo%';

这种行为破坏了 Laravel 分页,因为分页器显示“显示 11 到 4 ”并呈现 2 个页面链接。

MariaDB 在 CentOS 8.3 上是 10.5.9

标签: mysqllaravelmariadb

解决方案


推荐阅读