首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL数据库PHP中的计数填充列表

使用MySQL数据库PHP中的计数填充列表
EN

Stack Overflow用户
提问于 2013-04-03 01:23:42
回答 5查看 174关注 0票数 0

我正在尝试创建一个基于从MySQL数据库的列中使用通配符选择的结果的列表。我能够做到这一点,但是它看起来很慢,而且可能是错误的方式。下面是我正在修改的代码

代码语言:javascript
复制
$optarr = array("leather", "cruise", "tint", "sunroof", "moonroof", "navigation", "antilock");
 foreach ($optarr as $i) {
    $refquery = "SELECT stock, COUNT(stock) FROM vehicle_list AND options LIKE '%$i%'"; 
    $refresult = mysql_query($refquery) or die(mysql_error());
    $row = mysql_fetch_array($refresult);

    if ($row['COUNT(stock)'] != '0') {
    echo "".ucfirst($i)." (".$row['COUNT(stock)'].")<br />";
    }
}

这将输出以下内容

代码语言:javascript
复制
Leather(234)
Cruise(343)
Tint(231)
Sunroof(343)
.....

这个列表最终将有大约20-30个不同的过滤器选项,目前在4-5个选项中,我可以看到很大的延迟。我做错了什么,只是不知道是什么。也许是整个方法?

数据库中的options列是由@ symbols分隔的整个文本块,因此我使用Like通配符来提取车辆选项。

谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-03 01:26:31

在foreach循环之前进行数据库调用。这将在每个循环上调用数据库,并且将如预期的那样缓慢。

票数 1
EN

Stack Overflow用户

发布于 2013-04-03 01:30:13

从规范化和优化的角度来看,您应该将您的选项放在一个单独的表中,然后使用一个表将vehicle_list表链接到您的选项。

这将允许您使用join和group by来仅使用一个查询来获得所需的结果,而不是使用双边的like (即使在使用索引时,这也不是一个好主意)。

http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

票数 0
EN

Stack Overflow用户

发布于 2013-04-03 01:30:29

您必须连接表

代码语言:javascript
复制
 $optarr = array("leather", "cruise", "tint", "sunroof", "moonroof", "navigation", "antilock");
     foreach ($optarr as $i) {
    $refquery = "SELECT stock, COUNT(stock)  FROM vehicle_list 
    LEFT JOIN options ON vehicle_list.stock=options.stock LIKE '%$i%'"; 
    $refresult = mysql_query($refquery) or die(mysql_error());
    $row = mysql_fetch_array($refresult);

    if ($row['COUNT(stock)'] != '0') {
    echo "".ucfirst($i)." (".$row['COUNT(stock)'].")<br />";
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15770336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档