dzhope 发表于 2011-2-14 09:00:16

开启“列表不重复公司信息”显示条数不对的问题

后台开启了“列表不重复公司信息”后,前台供应列表显示数量均不对,后来发现时sql错误

include/tag.func.php
103行[*]
[*]      $num = 0;
[*]      $group = $group ? " GROUP BY $group" : '';
[*]      $order = $order ? " ORDER BY $order" : '';
[*]      $condition = stripslashes($condition);
[*]      $condition = str_replace('##', '%', $condition);
[*]      if($showpage) {
[*]                $num = $db->count($table, $condition.$group, $tag_expires ? $tag_expires : $CFG['db_expires']);
[*]
[*]复制代码在include/db_mysql.class.php
63行[*]
[*]      function count($table, $condition = '', $expires = 0) {
[*]                global $DT_TIME;
[*]                $sql = 'SELECT COUNT(*) as amount FROM '.$table;
[*]                if($condition) $sql .= ' WHERE '.$condition;
[*]
[*]复制代码如果开启“列表不重复公司信息”,此处的$condition=$condition.$group。

也就是说,SELECT COUNT(*) as amount FROM $table where *** group by username

但是这样的话,amount就是分组统计结果,如下图:

这样列表显示的就不是1240条结果,而是36条,同样的问题在别的地方也存在,都是COUNT(*)和group by 联合使用导致的。

请官方研究一下,给出一个合理的解决方案。谢谢!

peter1 发表于 2011-2-15 16:05:05


而且搜索时不会全部显示出来

dzhope 发表于 2011-3-9 11:07:33


http://bbs.destoon.com/static/image/smiley/default/lol.gif

http://bbs.destoon.com/static/image/smiley/default/lol.gif

之前我们通过修改sql语句来解决了该问题,但是发现group by在大数据量的情况下,非常影响效率。
因此我们单独创建了一个sell_list表,单独用来显示前台供应列表信息的,开启公司模式,就调用sell_list表,开启所有信息模式,就调用sell表

关于sell_list表的数据更新,该数据,每个公司只存储最新的供应信息。每次会员操作后台操作,都调用该会员最新时间的信息同步更新到sell_list表即可。。。。。。
页: [1]
查看完整版本: 开启“列表不重复公司信息”显示条数不对的问题