不重叠的mysql计数联合结果

不重叠的mysql计数联合结果,mysql,count,duplicates,union,Mysql,Count,Duplicates,Union,好的,我有个问题 (SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC) UNION (SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC) UNION (SELECT * FROM jokes WH

好的,我有个问题

(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
UNION
(SELECT * FROM jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) ORDER BY ups DESC,downs ASC)
 LIMIT 0, 30
基本上,我想做的是不受限制地获得总结果的计数,并获得有限的列表

我遇到的问题是,当我运行count查询时,得到的数字比返回的结果要大。我猜这是因为当我返回结果时,它会过滤掉所有重叠的行,因为计数只对每个行进行计数,因为我必须手动添加它们

关于如何清理整个过程有什么想法吗

另外,请注意select语句的数量是动态变化的,但我希望有一种方法可以得到一个可以解释重复的通用计数


谢谢。

这个怎么样

SELECT COUNT(DISTINCT Id)
FROM (SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) 
      UNION
      SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) 
      UNION
      SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?)) t

这将为您提供唯一的计数,还请注意,我已取消了order by,因为它不值得为计数查询计算。

获得此错误时,每个派生表都必须有自己的表alias@Bassam的答案是正确的,但工会已经给了你明确的结果,所以明确是没有必要的,而且会稍微影响绩效。
SELECT COUNT(DISTINCT Id)
FROM (SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) 
      UNION
      SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?) 
      UNION
      SELECT Id From jokes WHERE flags < 5 AND (title LIKE ? OR joke LIKE ?)) t