//get the current member count
$sql = ("SELECT count(member_id) as total_members from exp_members");
$result = mysql_query($sql) or die(mysql_error());
$num_rows = mysql_num_rows($result);
if ($num_rows != 0) {
while($row = mysql_fetch_array($result)) {
$total_members = $row['total_members'];
}
}
//get list of products
$sql = ("SELECT m_field_id, m_field_label from exp_member_fields where m_field_name like 'cf_member_ap_%' order by m_field_id asc");
$result = mysql_query($sql) or die(mysql_error());
$num_rows = mysql_num_rows($result);
if ($num_rows != 0) {
while($row = mysql_fetch_array($result)) {
$m_field_id = $row['m_field_id'];
$m_field_label = $row['m_field_label'];
$sql2 = ("SELECT count(m_field_id_".$m_field_id.") as count from exp_member_data where m_field_id_".$m_field_id." = 'y'");
$result2 = mysql_query($sql2) or die(mysql_error());
$num_rows2 = mysql_num_rows($result2);
if ($num_rows2 != 0) {
while($row2 = mysql_fetch_array($result2)) {
$p = ($row2['count']/$total_members)*100;
$n = $row2['count'];
$out .= '<tr><td>'.$m_field_label.'</td><td>'.number_format($p,1).'%</td><td>'.$n.'</td></tr>';
}
}
}
}
回答
数查询将始终返回1行,所以你不需要循环
$sql = ("SELECT count(member_id) as total_members from exp_members");
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($result);
$total_members = $row['total_members'];
除此之外,我不知道如何可以做的更好。你可以为你的两个计数查询做同样的事情。
由于这些是直线前进的查询,任何瓶颈现在我想将是对MySQL的结束
第一计查询(“获取当前成员数”)应该几乎在瞬间执行。
第二个查询(“获取产品列表”)可能会很慢,具体取决于您的索引。您正在查询m_field_name
,然后在m_field_id
上订购,因此您可能需要这两者的组合索引。
重复执行的第三个查询(每个产品一次)查询m_field_id_*
(即任意数量的可能字段),因此您应该确保它们已被索引。总之,您需要a)找出哪些查询运行缓慢,b)索引需要编制索引的内容,以及c)如果可能,组合查询。
在任何查询中都没有m_field_id_ * – 2011-05-19 01:03:40
星号(*)是“通配符”或“匹配任何内容”的常用简写形式。你在查询中有这个:m_field_id _“。$ m_field_id – dkamins 2011-05-19 01:15:07
如果您可以用非代码术语来描述您要完成的任务,则更容易提供帮助。但是,一个问题的一个指标是在一个查询的行上看到一个php循环,而另一个查询则为每行执行一个查询。
有许多方法可以查询小计。但是如果你可以解释一下这个目标,这将更容易解释。
我猜想我希望尝试做得更好的部分是获取产品列表,然后对每个产品运行查询以获得具有'y'的用户数该产品的列,它不是运行缓慢,本身,它的罚款,我们正在缓存结果。我只是想知道,如果我可以使它在系统上更少密集。 – 2011-05-19 00:56:09
本质上在exp_member_data表中我们有行与member_id和每个成员显然为1行,大约有30万个成员,在同一个表中是每个产品的列,如果他们不使用或不使用该产品,单元格会说'n'或'y' – 2011-05-19 00:59:35
产品名称是在一个名为exp_member_fields的表中,这个表中的每一行代表一个自定义的成员字段,因此,我想从表中获取唯一ID(X)和产品标签,代表产品的所有行,然后获取行数与exp_member_data表中的'y'列(m_field_id_X)与exp_member_fields表中的行ID相关。 – 2011-05-19 01:03:05
- 1. 如何让我的查询更高效?
- 2. 如何让此搜索查询更高效?
- 3. 更高效的查询MYSQL
- 4. 如何让此代码更高效?
- 5. 如何让此送货计算器更高效?
- 6. 如何让MySQL更高效地运行?
- 7. 让Django的高效查询
- 8. 如何让此查询更简单?
- 9. 哪个MySQL JOIN查询更高效?
- 10. mysql更高效的查询方式
- 11. 提高MySQL更新查询效率
- 12. MySQL和使子查询更高效
- 13. 在mysql中更高效的查询
- 14. 如何使此SQL查询更高效? PHP
- 15. 如何让这更高效?
- 16. 如何使此查询更有效?
- 17. 如何让Django ManyToMany'通过'查询更高效?
- 18. 如何让这个子查询更高效?
- 19. 如何让这组Rails 3.1查询更高效?
- 20. 如何让共享点CAML查询更高效地工作
- 21. 如何让此VB.NET代码更高效更快?
- 22. 如何让sqlite查询更有效率?
- 23. MySQL的:高效的查询
- 24. 高效的mysql查询
- 25. 如何使此MySQL查询更快?
- 26. 如何使这个删除查询在MySQL中更高效?
- 27. 如何高效地执行此mysql查询? (加入和检查存在)
- 28. 使查询更加高效
- 29. 哪些查询更高效?
- 30. 哪个查询更高效?
你的表定义(包括索引)是什么? – 2011-05-19 00:39:20