php mysql 过滤重复记录并排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php mysql 过滤重复记录并排序相关的知识,希望对你有一定的参考价值。

table1
id name
1 a
2 b
3 c

table2
id name cont
1 a aa
2 b bb
3 a aaaa

SELECT *,count(distinct table2.name) FROM table1,table2 WHERE table1.name = table2.name GROUP BY table2.name ORDER BY table2.id DESC";

重复的记录是过滤掉了,现在问题是我要的是table2中重复的name=a的ID最大的cont=aaaa的内容。
每次读出来的都是name=a ,cont=aa的内容。。。
$sqlcha ="SELECT *,count(distinct crm_followinfo.FOL_Comname) FROM crm_customers,crm_followinfo WHERE crm_customers.CUS_Comname = crm_followinfo.FOL_Comname GROUP BY crm_followinfo.FOL_Comname ORDER BY FOL_Id DESC";

$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $sqlcha, $startRow_Recordset1, $maxRows_Recordset1);
$connn = mysql_query($query_limit_Recordset1, $conn) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($connn);

在这个表crm_followinfo 有个FOL_Id字段 , 如何除掉重复后,显示最大的FOL_Id的这条记录呢?


select name,desc,count(desc) as c from tmp_table group by name,desc order by c desc limit 9;
把name放在前面就是优先给name排序,name一样的就按后面的desc排序。
这个句子就能满足你的要求。
3.以count(desc)的多少排列name;
不知道这句话什么意思。不过对你想要的结果没有什么影响。

另外,列名不要用desc。desc 是数据库中的一个关键字。原则上最好不要用来做列名。
------------------------补充-----------------------

满足你的第三个条件也很容易,
group by name,desc 变成
group by name,count(desc)就可以了
参考技术A select name, max(cont) as cont
into #temp2
from @table2
group by name

SELECT *
FROM @table1 a, #temp2 b
WHERE a.name = b.name
ORDER BY b.cont desc, b.name DESC

使用 PHP 更新重复的 MySQL 记录

【中文标题】使用 PHP 更新重复的 MySQL 记录【英文标题】:Update duplicate MySQL record using PHP 【发布时间】:2011-08-30 11:50:48 【问题描述】:

我需要使用 PHP 更新数据库中的重复记录。

例如:

我在数据库中有三个相同的记录micheal。我需要将两个micheal 记录更新为micheal 1micheal 2,但留下一个micheal 原样。

【问题讨论】:

标记为紧急并不会帮助您,而是在您的问题中小心谨慎。现在,到目前为止,您尝试过什么? 【参考方案1】:

试试....

UPDATE yourdata
SET name='michael 1'
WHERE name='michael'
LIMIT 0,1;

UPDATE yourdata
SET name='michael 2'
WHERE name='michael'
LIMIT 0,1;

然后添加唯一索引以防止再次发生。

【讨论】:

如果里面有 10000 michael 呢? :) for ($i=0;$i<9999;$i++) ...?【参考方案2】:
$query = "SELECT * FROM table ORDER BY name";

$result = mysql_query($query, $db) or die('MySQL Error: ' . mysql_error()); // if mysql_query fails, prints the error reported by the mysql server and stops execution

$lastName = "";
$i = 1;
while($row = mysql_fetch_assoc($result)) 

    if ( $lastName==$row['name'] )
        $q = "UPDATE table set name ='".$row['name']." ".$i."' WHERE id = ".$row['id'];
        mysql_query($q, $dbh) or die ("problema con query");
        $i++;
    

    else
        $i = 1;

    $lastName = $row['name'];

如果您在并发修改时遇到问题,请尝试将 id 和名称存储为数组并启动更新。

【讨论】:

以上是关于php mysql 过滤重复记录并排序的主要内容,如果未能解决你的问题,请参考以下文章

distinct mysql过滤重复记录

过滤掉多行中的mysql重复记录

使用 PHP 更新重复的 MySQL 记录

mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留

在PHP中将MySQL记录集转换为JSON字符串[重复]

求mysql 语句去重并按重复个数排序