我的网站上有很大的问题,我有这个功能从数据库中获取所有类别: -
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行,我们必须从我的表中显示所有这些行,我该如何解决这个问题。
答案 0 :(得分:3)
一个包含251,932项的选择框几乎不实用。我建议您在前端使用AJAX自动完成功能,这样您就可以一次获取更少的结果。 其中有一些here,here等等。您可以根据自己的要求挑选。 This one非常适合常规选择;我曾经做过一段时间。
答案 1 :(得分:1)
您是否尝试过对您的网站进行基准测试,以找出延迟的来源?我很相信,有了那么多记录,它就是查询时间和渲染时间。这只是太多的数据。为数据库查询实现一些缓存可能有助于一方,但我认为数据库并不是真正的主要问题。
您必须避免显示所有类别。没有其他方法可以处理这样的事情。我可以想象两种可能对你有用的方法:
您尝试将类别分类为几个超类别和 用户首先选择那些超级类别,然后选择 属于它的类别将是延迟加载的(可能通过AJAX)。
您可以提供一个输入字段,显示清单,而不是显示所有的故障 根据用户在字段中输入的内容建议的类别。
尝试通过分析所有匹配类别来获取匹配类别列表可能是个好主意 用户输入的其他数据。考虑它可能的可用值的数量 值得投入时间来构建文本挖掘方法来处理这个问题。
最明显的是减少类别数量,但我想这是不可能的。
哦,并且旁注:return
过早地结束了函数执行,因此永远不会到达mysql_free_result($query);
。无论如何,这是错误的地方。完成处理后,您应该释放结果。
答案 2 :(得分:0)
我建议如果它是静态查询,您可以缓存结果而不是每次都获取它。它肯定会第一次加载,但对于以后的请求它不会是一个问题。
答案 3 :(得分:0)
将选择框更改为搜索框,然后将ajax调用为php。