0

我的网站有大问题,我有这个功能可以从数据库中获取所有类别:-

public function selectallcatdata()
{
    $query = mysql_query("select Category_name,Category_id from category where Category_delete='0'");
    return $query;
    mysql_free_result($query);
}

我在这样的选择类型上使用此功能:-

<select name="txtCompanyCat" id="txtCompanyCat">
<option selected value="">choose the Category ... </option>
<?php 
$CategoryNameData = $select -> selectallcatdata();
while($CatNameRow = mysql_fetch_array($CategoryNameData)){
    $CatID = $CatNameRow['Category_id'];
    $CatName = $CatNameRow['Category_name'];
?>
<option value="<?php echo $CatID; ?>"><?php echo $CatName; ?></option>
<?php } 
unset($CatID);
unset($CatName);
?>
</select>

所以,问题是我在这个表上有 251932 行,我们必须从我的表中显示所有这些行,我该如何解决这个负载。

4

4 回答 4

3

包含 251,932 个项目的选择框根本不实用。我建议您为前端使用 AJAX 自动完成功能,这将允许您一次获取更少的结果。这里有一些,这里还有更多。您可以根据自己的要求进行选择。这个非常适用于常规选择;我前一阵子研究过它。

于 2013-04-24T08:50:23.047 回答
1

您是否尝试过对您的网站进行基准测试以找出延迟的来源?我相当确定有这么多记录是查询时间和渲染时间。只是数据太多了。为数据库查询实现一些缓存可能会有所帮助,但我认为数据库并不是这里真正的主要问题。

您将不得不避免显示所有类别。没有其他方法可以处理这样的事情。我可以想象两种可能对您有用的方法:

  1. 您尝试将类别分类为几个超类别,用户首先选择这些超类别,然后属于它的类别将被延迟加载(可能通过 AJAX)。


  2. 您提供了一个输入字段,该字段将根据用户在字段中键入的内容显示建议的类别列表,而不是显示所有类别。

  3. 尝试通过分析用户输入的所有其他数据来导出匹配类别列表可能是个好主意。考虑到可用值的数量,确实值得花时间构建文本挖掘方法来处理它。

最明显的是减少类别的数量,但我想这是不可能的。

哦,顺便说一句:return过早地结束函数执行,所以你mysql_free_result($query);永远不会被联系到。无论如何,这是错误的放置位置。完成处理后,您应该释放结果。

于 2013-04-24T08:49:01.767 回答
0

我建议如果它是一个静态查询,您可以缓存结果而不是每次都获取它。它肯定会第一次加载,但对于以后的请求,它不会成为问题。

于 2013-04-24T08:43:24.343 回答
0

将选择框更改为搜索框,然后 ajax 调用 php 。

于 2013-04-24T08:57:44.940 回答