【发布时间】: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