【问题标题】:SQL_CALC_FOUND_ROWS not working sometimesSQL_CALC_FOUND_ROWS 有时不工作
【发布时间】:2014-02-23 10:33:28
【问题描述】:
$query->select('SQL_CALC_FOUND_ROWS i.title,i.fulltext,i.shorttext');
        $query->from('#__items as i');
$query->where('i.shorttext LIKE "%'.$word.'%");

在这种情况下,一切都是正确的,并且行数是真实的......例如,如果它返回 21 个项目......它是真实的......(实际返回的结果是 21)

但在这段代码中:

 $query->select('SQL_CALC_FOUND_ROWS i.title,i.fulltext,i.shorttext');
            $query->from('#__items as i');
$query->where('i.shorttext LIKE "%'.$word.'%" 
            OR i.fulltext LIKE "%'.$word.'%" 
            OR i.title LIKE "%'.$word.'%"');

代码将行数返回给我 63! (比真实的大 3 倍。)

当然,它们都是实时打印的(不是重复的)。

怎么了? tnx


我改成这个(在三个or条件周围加了括号),问题就解决了。

 $query->select('SQL_CALC_FOUND_ROWS i.title,i.fulltext,i.shorttext');
            $query->from('#__items as i');
$query->where('(i.shorttext LIKE "%'.$word.'%" 
            OR i.fulltext LIKE "%'.$word.'%" 
            OR i.title LIKE "%'.$word.'%")');

【问题讨论】:

  • 您的语句是否有LIMIT 子句(您没有显示)?如果没有,那么SQL_CALC_FOUND_ROWS没有任何目的。
  • 解释计划是什么样的?原版和固定版是一样的还是不同的?还有$query->where 语法是什么?您是否使用了可能会将查询重写为UNION 的东西?
  • 它是 joomla 的基本功能......但规则是固定的。 :)
  • 您是否能够检索从两个版本执行的实际 SQL?你能通过在(比如)MySQL 查询工作台中运行 SQL 来重现这一点吗?
  • 要获取查询,您将使用 echo $query->dump();.

标签: mysql joomla sql-like sql-calc-found-rows


【解决方案1】:

代码返回 63,因为您的查询返回 63 行(或者您后来在 PHP 中更改了变量)。

要么是正确的结果,要么是您提取的数字错误。在这一点上,MySQL 没有任何魔力。

【讨论】:

  • 但全部记录是 21!
  • 要么号码正确,要么取回号码错误。
猜你喜欢
  • 2017-03-10
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多