php - 导致大量输出的mysql查询使php页面变为空白

标签 php mysql joomla sql-like

我使用类似查询的搜索功能。当我搜索数据库中很少的关键字时,一切顺利。但是当关键字在 db 中是“popular”时,屏幕会变成空白页。

function dbSearch($q) //$q is array of keywords
{

  global $mainframe, $option;

  $db =& JFactory::getDBO();

  $str = implode("%' AND text LIKE '%", $q);
  $str = str_replace("AND text LIKE '%-", "AND text NOT LIKE '%", $str);

  $lim   = $mainframe->getUserStateFromRequest("$option.limit", 'limit', 100, 'int'); 
  $lim0  = JRequest::getVar('limitstart', 0, '', 'int');
  $query = "SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE type=4 AND text LIKE '%".$str."%' ORDER BY ref ASC";

  $db->setQuery( $query );
  $rows = $db->loadObjectList();
  $count = count($rows);

  if ($db->getErrorNum())
  {
    echo $db->stderr();
    return false;
  }

  $db->setQuery('SELECT FOUND_ROWS();'); 
  jimport('joomla.html.pagination');
  $pageNav = new JPagination( $db->loadResult(), $lim0, $lim );

  HTML_output::showFoundResults($rows, $pageNav, $count);
}

上面的查询有问题吗?为什么它在很多结果上都失败了?

最佳答案

我的猜测是您的 PHP 需要很长时间才能根据查询生成结果。您的 Apache 错误日志可能会显示 PHP 超时错误,因为页面生成时间超过 30 秒。

尝试将 LIMIT 设置为更小的值,例如 10,看看它是否能够生成页面。

您可以做的另一件事是跳过所谓的“停用词”,例如“and”、“the”等在语言中非常常见的词。搜索引擎执行此操作,快速搜索将为您提供更多详细信息和停用词列表。

您可以通过在 phpMyAdmin 等工具中运行查询来查看执行查询需要多长时间。

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE type=4 AND text LIKE '%jabberwocky%' ORDER BY ref ASC";

相比于

SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE type=4 AND text LIKE '%the%' ORDER BY ref ASC";

在同一个查询工具中,如果您在查询前面加上“EXPLAIN”,MySQL 将返回完成查询所必须执行的所有操作的列表。

需要注意的一点是,搜索“the”一词也会返回“theory”的结果,这与您的查询构造方式相同。不使用 REGEX 查询就编写代码不是件容易的事。

关于php - 导致大量输出的mysql查询使php页面变为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5167984/

相关文章:

javascript - ajax 内的分页无法转到正确的页面

php - 使用 PHP5 配置 Apache2.2.15 时出错

mysql - 仅选择与 MYSQL 匹配的邮政编码

css - 如果我不在我的自定义模板中使用标准的 joomla CSS 怎么办?

css - Jevents(joomla)月历单元格大小

javascript - 获取文本字段中的选择值以及更改时的值

php - 当来自第 3 方 IFRAME 时,Chrome 不保留我的 _SESSION 变量,但直接访问时效果很好

mysql - 我可以使用elfinder浏览数据库(如mysql)中的项目吗

java - 在 Hibernate 的@Formula 中使用 NATURAL JOIN

Joomla : How to set access permission from a custom component?