购货人查询记录统计

2016-07-07 15:05 来源:www.chinab4c.com 作者:ecshop专家





今儿测试发现了一个意外的bug,呵呵,由这个bug发现了ec存在的一个bug。 版本 2.6.1 不知道新版是否已经修正了。

现象描述:

订单查询,购货人查询 后,返回的 记录数目统计不正确。

涉及代码部分:
  1. .......

  2. if ($filter['user_name'])
  3. {
  4. $where .= " AND u.user_name LIKE '%"
  5. . mysql_like_quote($filter['user_name']) . "%'";
  6. }


  7. .......
  8. /* 记录总数 */
  9. if ($filter['user_name'])
  10. {
  11. $sql = "SELECT COUNT(*) FROM "
  12. . $GLOBALS['ecs']->table('order_info') . " AS o ,"
  13. . $GLOBALS['ecs']->table('users') . " AS u " . $where;
  14. }
  15. else
  16. {
  17. $sql = "SELECT COUNT(*) FROM "
  18. . $GLOBALS['ecs']->table('order_info')
  19. . " AS o ". $where;
  20. }
复制代码
原因分析:

由于设定了u.user_name ,在记录总数 时,单纯的从两个表中搜索,对ecs_order_info表是没有限定的,实际返回值是所有的数据总数。

修改方案:

1. 在$where 处理,根据 $filter['user_name'] 搜索 ecs_users 表的 user_id 字段,然后加入到 $where 中。代码如下:
  1. if ($filter['user_name'] == $GLOBALS['_LANG']['anonymous'])
  2. {
  3. $where .= " AND o.user_id = 0 ";
  4. }
  5. else if($filter['user_name'])
  6. {
  7. $sql = "select user_id from " . $GLOBALS['ecs']->table('users')
  8. . " AS u where user_name LIKE '%"
  9. . mysql_like_quote($filter['user_name']) . "%'";

  10. $rrow = $GLOBALS['db']->getAll($sql);
  11. if($rrow[0])
  12. {
  13. $ads = array();
  14. foreach($rrow AS $rkey => $rvalue)
  15. {
  16. $ads[$rkey] = $rvalue['user_id'];
  17. }
  18. $where .= " AND o.user_id " . db_create_in($ads);
  19. }
  20. else
  21. {
  22. $where .= " AND o.user_id = -1 ";
  23. }
  24. }
复制代码
2. 在记录总数的地方处理,对两个表链接查询。

不过,由于我在下面的代码中增加了 订单金额 和 有效订单金额==的统计,所以不想涉及 ecs_users表,于是采用了方案一 。
这部分代码没有写,哈哈哈。

回答:
看不懂,迷糊ING