Mysql 为什么查询返回没有LIMIT子句的空结果集?
我有一个mysql函数:Mysql 为什么查询返回没有LIMIT子句的空结果集?,mysql,sql,Mysql,Sql,我有一个mysql函数: BEGIN DECLARE top_tags VARCHAR(100) charset utf8; SELECT substring_index(group_concat(x.NAME order BY x.tag_score DESC separator ','), ',', 5) INTO top_tags FROM (SELECT t.NAME, Sum(r.score) AS tag_score FROM reputa
BEGIN
DECLARE top_tags VARCHAR(100) charset utf8;
SELECT substring_index(group_concat(x.NAME order BY x.tag_score DESC separator ','), ',', 5)
INTO top_tags
FROM (SELECT t.NAME, Sum(r.score) AS tag_score
FROM reputations r
JOIN qanda_tags qt ON qt.qanda_id = r.question_id
JOIN tags t ON t.id = qt.tag_id
WHERE r.owner_id = 1
AND r.date_time > CASE 'all'
WHEN 'WEEK' THEN unix_timestamp(date_sub(Now(), interval 1 week))
WHEN 'MONTH' THEN unix_timestamp(date_sub(now(), interval 1 month))
WHEN 'YEAR' THEN unix_timestamp(date_sub(now(), interval 1 year))
ELSE 1
END
group BY t.NAME ) x;
return top_tags;
end
它返回一个空的结果集:
当我在groupbyt.NAME
后面添加limit60
子句时,它返回预期结果:
为什么呢
注意:
限制61
或更多也不会导致结果<代码>限制60或更少会有结果。我不确定,但在组concat()之前进行过滤会更有效吗
也许您遇到了与组\u concat\u max\u len
侧注相关的问题:这可能只是编辑您的查询以在此处演示的产物,但您的案例
表达式似乎格式不正确;它将始终使用ELSE值。
SELECT group_concat(x.NAME order BY x.tag_score DESC separator ',')
INTO top_tags
FROM (SELECT t.NAME, Sum(r.score) AS tag_score
FROM reputations r JOIN
qanda_tags qt
ON qt.qanda_id = r.question_id JOIN
tags t
ON t.id = qt.tag_id
WHERE r.owner_id = 1 AND
r.date_time > (CASE 'all'
WHEN 'WEEK' THEN unix_timestamp(date_sub(Now(), interval 1 week))
WHEN 'MONTH' THEN unix_timestamp(date_sub(now(), interval 1 month))
WHEN 'YEAR' THEN unix_timestamp(date_sub(now(), interval 1 year))
ELSE 1
END)
group BY t.NAME
order by tag_score desc
limit 5
) x;