有人知道为什么第一个查询有效,第二个查询不起作用?
第一个查询(工作):
SELECT *,
MATCH(username) AGAINST ('ergergergergergerg' IN BOOLEAN MODE) AS _score
FROM (ci_users) HAVING _score > '0';
第二个查询(不工作):
SELECT COUNT(id),
MATCH(username) AGAINST ('ergergergergergerg' IN BOOLEAN MODE) AS _score
FROM (ci_users) HAVING _score > '0';
第一个查询完全返回24行,第二个查询返回0行,而我只是将*
更改为 COUNT(id)
第一个返回匹配的每个行。
第二个包含ID上的聚合。
汇总时,mySQL足够聪明(或者我应该说,足够愚蠢),可以隐式从所有查询但不汇总的字段中选择任何值。因此,由于您不通过score
进行分组,也不会汇总score
,因此MySQL将仅返回所有记录的任何分数,即中级结果的所有记录(在应用having
子句之前),包括那些具有0的值。,此中间结果很可能仅包含一个数量,例如900和_score的计数为0。使用having
过滤后,没有记录。
现在,我很乐意做一个建议,但是我无法说出您实际上想从该查询中返回的内容。
SELECT COUNT(id)
FROM
(SELECT
id,
MATCH(username) AGAINST ('ergergergergergerg' IN BOOLEAN MODE) AS _score
FROM (ci_users) HAVING _score > '0') x;
甚至更好:
SELECT COUNT(id)
FROM (ci_users)
WHERE MATCH(username) AGAINST ('ergergergergergerg' IN BOOLEAN MODE) > '0'