在 Mysql 獲取數據時,若是想獲取某一列去重數據,若是獲取呢php
舉個例子:mysql
advert_pro_ad 表sql
CREATE TABLE `advert_pro_ad` ( `advert_id` int(11) NOT NULL DEFAULT '0' COMMENT '廣告id', `pro_id` int(11) NOT NULL DEFAULT '0' COMMENT '項目id', UNIQUE KEY `uniq_pro_aid` (`advert_id`,`pro_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '廣告和廣告項目關聯表';
項目和廣告是一對多的關係。如何獲取去重以後的項目Id呢?spa
有三種辦法code
1,blog
select distinct(pro_id) from advert_pro_ad order by pro_id desc
2,進程
select pro_id from advert_pro_ad order by pro_id desc
把數據取出來以後,再用 array_unique 去重內存
3,io
select pro_id from advert_pro_ad group by pro_id order by pro_id desc
建議使用第一種,使用第二種會有如下弊端class
一、進程間IO通信暴增。從mysql會向php傳大量的數據。IO通信是最影響速度的。
二、內存限制。PHP是內存操做。一般默認執行內存爲128M,能處理的數據量只會大大小於128M.
除非改默認設置到較大值,加大內存開銷。
三、效率較差。不只從mysql到php有複製,並且array_unique效率也mysql DISTINCT差。
轉自:https://stackoverflow.com/questions/19473869/select-distinct-or-array-unique