用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7580|回复: 13
收起左侧

[讨论/交流] 最近发现CI的$this->db->distinct(); 貌似没什么意义!

[复制链接]
发表于 2009-10-21 09:28:28 | 显示全部楼层 |阅读模式
$this->db->distinct();
好像不支持参数,

$this->db->distinct('ID');

结果 还是 SELECT distinct * FROM TABLE

结果还是用 select了

$this->db->select('DISTINCT(TEAMID)');
发表于 2009-10-21 10:39:35 | 显示全部楼层
用的什么数据库?
 楼主| 发表于 2009-10-22 14:25:36 | 显示全部楼层
mssql 数据库
发表于 2009-10-22 15:55:02 | 显示全部楼层
我有个ci+mssql项目好几个地方都用到ar distinct,方便的很
发表于 2009-10-22 20:06:23 | 显示全部楼层
就是哦~~貌似不理解这个方法~
发表于 2009-10-22 20:14:26 | 显示全部楼层
刚才测试了一下sql语句,发觉这个东东貌似作用也仅仅是屏蔽掉重复值的列~
如果你的表有主键,而且你select的值里也要包含这个主键的话,它本身就没多大意义啊~
除非你只输出个别列值~
我测试的mysql中:
SELECT id,distinct name,price FROM `orders` WHERE 1; //这是语法错误
SELECT distinct * FROM TABLE ;//这没有意义

呵呵~
 楼主| 发表于 2009-10-23 16:00:14 | 显示全部楼层
$this->db->select('DISTINCT(TEAMID)');
这句结果是 SELECT distinct(TEAMID) FROM TABLE
只能这样用了.懒的改 ar了...
发表于 2009-10-23 17:39:03 | 显示全部楼层
:):):)
发表于 2009-10-23 18:50:00 | 显示全部楼层
屏蔽重复的列,单单这个用程序控制就要花费很多额外开销,而数据只要一个distinct就解决了

像模糊查询,查询结果很可能存在多个相同的列,用程序控制就要写冗长的循环检测,即增加了工作量又降低了执行效率,这种事只是简单的执行一个 distinct 就搞定了

如果distinct真的没有意义,那为什么这些SQL开发商没有去掉它呢?
发表于 2009-10-23 18:53:30 | 显示全部楼层
我测试的mysql中:
SELECT id,distinct name,price FROM `orders` WHERE 1; //这是语法错误
SELECT distinct * FROM TABLE ;//这没有意义...
kazaff 发表于 2009-10-22 20:14

语法用错了,应该是 SELECT distinct name,id,price FROM `orders`

本版积分规则