mysql查询时去除重复数据以及 FOUND_ROWS 统计记录函数

查询时都会遇到去除重复问题和统计总记录数的问题,所以总结下来,下次就要运用喔。(*^__^*) 嘻嘻……
 1、mysql中去除重复数据,使用distinct,将其放在查询字段首位或者是最后一位都会出错,要与关键字 group by 分组来结合使用。
并且distinct field 要在查询字段首位, group by 字段放在sql语句之后。
例如:
select distinct userid,username,url,userid,title,catid,inputtime
       FROM nmsg_webyp_product
        WHERE username ='$q' or username like '%$q%' or username like '%$q' group by userid
2、MySQL中有两个函数来计算上一条语句影响了多少行
(1) 通常mysql 获取查询记录数我们使用如下语句 
  SELECT COUNT(*) FROM users WHERE k='avs';        
或者是
  select count(id) from user where username ='lili';
或者是
  select count(1) from user where username ='lili';
或者是   SELECT id FROM goods WHERE username='lili' LIMIT 10;
(2)统计查询的总记录数,还可以用mysql中的 FOUND_ROWS  函数来统计,例如:
   $sql = "SELECT SQL_CALC_FOUND_ROWS
          s.data ,c.companyname,p.title,p.inputtime,p.url,p.username
                 FROM
                   `nmsg_webyp_company` c
                 left JOIN nmsg_webyp_product p ON p.userid = c.userid
                 right join nmsg_websearch s on s.id = p.id
                 WHERE
                   c.companyname = '$q'
                    OR c.companyname LIKE '%$q'
                     OR c.companyname LIKE '%$q%'
                     OR s.data = '$q'
                     OR s.data LIKE '$q%'
                     OR s.data LIKE '%$q%'
                 GROUP BY
                     c.userid";
$seaQuery = mysql_query($sql);
$seaQuery = mysql_query("SELECT FOUND_ROWS() as total");
此处如果是 SELECT FOUND_ROWS(),得到的结果如下,所以用另用别名容易获取,少些失误。
Array
(
    [FOUND_ROWS()] => 4
)
// 从结果集取得的一行作为关联数组
$getTotal = mysql_fetch_array($seaQuery,MYSQL_ASSOC);
$data = array();
while ($res = mysql_fetch_array($comQuery,MYSQL_ASSOC)) {
  $data[] = $res;
}

// 取出总记录数
$total = $getTotal['total'];
当使用其他的框架,还没有熟悉其中封装好的mysql 语句和函数时,就可以很方便使用它了,~~~~ 嘻嘻~~~

至于 FOUND_ROWS() 和count() 的效率问题,还没有去多次测试效率对比问题。



原文地址:https://www.cnblogs.com/enxixi/p/3783462.html