<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[用distinct在MySQL中查询多条不重复记录值]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 28 Dec 2009 13:18:06 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>mysql&gt; select distinct(UserNumber),Score_TT from Tbl_Score where FYear = &quot;2009&quot; and FWeek = &#039;53&#039; order by&nbsp;&nbsp; Score_TT desc limit 0,10;<br/>+-----------+--------+<br/>&#124; UserNumber&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; Score_TT &#124;<br/>+-----------+--------+<br/>&#124; 70213303* &#124;&nbsp;&nbsp; 1800 &#124; <br/>&#124; 78400557* &#124;&nbsp;&nbsp; 1450 &#124; <br/>&#124; 45598211* &#124;&nbsp;&nbsp; 1410 &#124; <br/>&#124; 7575629*&nbsp;&nbsp;&#124;&nbsp;&nbsp; 1200 &#124; <br/>&#124; 30394912* &#124;&nbsp;&nbsp; 1148 &#124; <br/>&#124; 98649685* &#124;&nbsp;&nbsp; 1050 &#124; <br/>&#124; 6653828*&nbsp;&nbsp;&#124;&nbsp;&nbsp;&nbsp;&nbsp;850 &#124; <br/>&#124; 38200298* &#124;&nbsp;&nbsp;&nbsp;&nbsp;800 &#124; <br/>&#124; 80496539* &#124;&nbsp;&nbsp;&nbsp;&nbsp;800 &#124; <br/>&#124; 18064165* &#124;&nbsp;&nbsp;&nbsp;&nbsp;670 &#124; <br/>+-----------+--------+<br/>10 rows in set (0.37 sec)<br/><br/>mysql&gt; select count(distinct UserNumber),UserNumber,Score_TT from Tbl_Score where FYear = &quot;2009&quot; and FWeek = &#039;53&#039; group by UserNumber order by&nbsp;&nbsp; Score_TT desc limit 0,10;<br/>+---------------------+-----------+--------+<br/>&#124; count(distinct UserNumber) &#124; UserNumber&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124; Score_TT &#124;<br/>+---------------------+-----------+--------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 70213303* &#124;&nbsp;&nbsp; 1800 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 78400557* &#124;&nbsp;&nbsp; 1450 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 45598211* &#124;&nbsp;&nbsp; 1410 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 7575629*&nbsp;&nbsp;&#124;&nbsp;&nbsp; 1200 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 30394912* &#124;&nbsp;&nbsp; 1148 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 98649685* &#124;&nbsp;&nbsp; 1050 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 6653828*&nbsp;&nbsp;&#124;&nbsp;&nbsp;&nbsp;&nbsp;850 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 80496539* &#124;&nbsp;&nbsp;&nbsp;&nbsp;800 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 38200298* &#124;&nbsp;&nbsp;&nbsp;&nbsp;800 &#124; <br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 &#124; 18064165* &#124;&nbsp;&nbsp;&nbsp;&nbsp;670 &#124; <br/>+---------------------+-----------+--------+<br/><br/></div><br/><br/>来源：<br/>在使用 mysql时，有时需要查询出某个字段不重复的记录，虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条，但往往只用它来返回不重复记录的条数，而不是用它来返回不重记录的所有值。其原因是distinct只能返回它的目标字段，而无法返回其它字段，这个问题让我困扰了很久，用distinct不能解决的话，我只有用二重循环查询来解决，而这样对于一个数据量非常大的站来说，无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题，网上也查不到解决方案，期间把朋友拉来帮忙，结果是我们两人都郁闷了！<br/><br/>下面先来看看例子：<br/><br/>table<br/><br/>id name<br/><br/>1 a<br/><br/>2 b<br/><br/>3 c<br/><br/>4 c<br/><br/>5 b<br/><br/>库结构大概这样，这只是一个简单的例子，实际情况会复杂得多。<br/><br/>比如我想用一条语句查询得到name不重复的所有数据，那就必须使用distinct去掉多余的重复记录。<br/><br/>select distinct name from table<br/><br/>得到的结果是:<br/><br/>name<br/><br/>a<br/><br/>b<br/><br/>c<br/><br/>好像达到效果了，可是，我想要得到的是id值呢？改一下查询语句吧:<br/><br/>select distinct name, id from table<br/><br/>结果会是:<br/><br/>id name<br/><br/>1 a<br/><br/>2 b<br/><br/>3 c<br/><br/>4 c<br/><br/>5 b<br/><br/>distinct怎么没起作用？作用是起了的，不过他同时作用了两个字段，也就是必须得id与name都相同的才会被排除……<br/><br/>我们再改改查询语句:<br/><br/>select id, distinct name from table<br/><br/>很遗憾，除了错误信息你什么也得不到，distinct必须放在开头。难到不能把distinct放到where条件里？能，照样报错。。。。。。。<br/><br/>很麻烦吧？确实，费尽心思都没能解决这个问题。没办法，继续找人问。<br/><br/>拉住公司里一JAVA程序员，他给我演示了oracle里使用distinct之后，也没找到mysql里的解决方案，最后下班之前他建议我试试group by。<br/><br/>试了半天，也不行，最后在mysql手册里找到一个用法，用group_concat(distinct name)配合group by name实现了我所需要的功能，兴奋，天佑我也，赶快试试。<br/><br/>报错。。。。。。。。。。。。郁闷。。。。。。。连mysql手册也跟我过不去，先给了我希望，然后又把我推向失望，好狠哪。。。。<br/><br/>再仔细一查，group_concat函数是4.1支持，晕，我4.0的。没办法，升级，升完级一试，成功。。。。。。<br/><br/>终于搞定了，不过这样一来，又必须要求客户也升级了。<br/><br/>突然灵机一闪，既然可以使用group_concat函数，那其它函数能行吗？<br/><br/>赶紧用count函数一试，成功，我。。。。。。。想哭啊，费了这么多工夫。。。。。。。。原来就这么简单……<br/><br/>现在将完整语句放出:<br/><br/>select *, count(distinct name) from table group by name<br/><br/>结果:<br/><br/>id name count(distinct name)<br/><br/>1 a 1<br/><br/>2 b 1<br/><br/>3 c 1<br/><br/>最后一项是多余的，不用管就行了，目的达到。<br/><br/>唉，原来mysql这么笨，轻轻一下就把他骗过去了，郁闷也就我吧（对了，还有容容那家伙），现在拿出来希望大家不要被这问题折腾。<br/><br/>哦，对，再顺便说一句，group by 必须放在 order by 和 limit之前，不然会报错.<br/><br/>更郁闷的事情发生了，在准备提交时容容发现，有更简单的解决方法:<br/><br/>select id, name from table group by name<br/><br/>看来对mysql的了解还是太肤浅了，不怕被笑话，发出来让大家别犯同样的错误。 <br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 用distinct在MySQL中查询多条不重复记录值]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>