用distinct or array_unique

 

 在 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

相關文章
相關標籤/搜索