有人知道为什么第一个查询有效,而第二个查询没有?
第一个查询(有效):
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)
答案 0 :(得分:2)
第一个返回匹配的每一行。
第二个包含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'