【问题标题】:Can i use SQL_CALC_FOUND_ROWS with DISTINCT?我可以将 SQL_CALC_FOUND_ROWS 与 DISTINCT 一起使用吗?
【发布时间】:2020-07-12 09:19:05
【问题描述】:

你好,玩得开心。

我有这样的疑问:

SELECT DISTINCT SQL_CALC_FOUND_ROWS SUBSTRING(color, 1, 3) as color FROM colors WHERE color LIKE '$color%' AND ottenok LIKE '$ottenok%';

然后:

SELECT FOUND_ROWS();

用于获取所有记录,就像它没有 DISTINCT 一样。但是在 SELECT FOUND_ROWS() 之后,我只得到了唯一的记录。

在搜索引擎中没有找到有关将 SQL_CALC_FOUND_ROWS 与 DISTINCT 结合使用的信息。所以我正在寻找建议,我如何编辑我的查询以能够同时获得大量 - 独特的和非独特的。

附言当然,我知道我可以从我的查询中删除“不同”,并在我的 sql 查询之后使用 php 函数 array_unique() 获得一个唯一列表,但这不适合我,我只需要使用 sql 来解决这个任务。 ..

【问题讨论】:

  • SELECT FOUND_ROWS() 仅检索在上一个查询中计算的值。它不会启动一个新的查询,更不用说一个完全不同的查询了。

标签: mysql


【解决方案1】:

简而言之:如果没有distinctfound_rows() 将无法为您提供计数,您需要单独计算这些记录。

背景:正如found_rows() 上的 mysql 文档所说(重点是我的):

一个 SELECT 语句可能包含一个 LIMIT 子句来限制服务器返回给客户端的行数。在某些情况下,希望知道在没有 LIMIT 的情况下该语句将返回多少行,但无需再次运行该语句。要获取此行数,请在 SELECT 语句中包含 SQL_CALC_FOUND_ROWS 选项,然后调用 FOUND_ROWS():

因此,此技术仅允许您获取计数,而无需对同一语句应用任何限制。 Distinct 修饰符在 limit 之前应用,因此该技术不能用于获取没有 distinct 的计数。

您可以使用单独的 count(*) 查询而不使用任何 distinct 修饰符来获得所需的计数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2020-08-04
    • 2018-10-23
    • 2011-02-22
    • 2021-03-16
    • 2016-11-20
    • 2019-01-25
    • 2011-06-11
    相关资源
    最近更新 更多