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

请教大家一个SQL查询效率问题

[复制链接]
发表于 2008-10-31 11:07:16 | 显示全部楼层 |阅读模式
数据表的仨个字段:
`status` enum('normal','delete') NOT NULL default 'normal',
`visible` enum('public','private','friends') NOT NULL default 'public'
`share` tinyint(1) unsigned NOT NULL default '0',

share=1时,visible肯定等于public
我想查询status等于normal并且visible等于private、friends、public三者之一,但若visible等于public这时share必须等于1
这个条件应该怎么构造使查询效率更好呢?
WHERE (visible!='public' OR share=1) AND status='normal'  
WHERE (visible in('private','friends') OR share=1) AND status='normal'  
WHERE (visible='private' OR  visible='friends' OR share=1) AND status='normal'  
条件语句有错吗?有更好的条件查询吗?感激不尽!

PS:目的是不读取visible="public" AND share=0的记录,其他全部读取。其中share=0的记录占全部记录的80%左右

[ 本帖最后由 hnmazda 于 2008-10-31 14:00 编辑 ]
发表于 2008-10-31 11:35:34 | 显示全部楼层
试试这个怎么样。
WHERE status = 'normal' AND ( visible = "public" AND share = 1 OR visible in("private","friends"))

OR操作要尽量避免交集把。
 楼主| 发表于 2008-10-31 12:16:15 | 显示全部楼层
在一个括号里面有AND和OR,俺理解不了呀。。优先级是怎么样子的,从左至右吗?
( visible = "public" AND share = 1 OR visible in("private","friends"))
那不就是visible 都是public的了?
发表于 2008-10-31 12:36:16 | 显示全部楼层
有 OR 和 AND 一定要用括号!否则就很难理解了。
 楼主| 发表于 2008-10-31 13:26:55 | 显示全部楼层
Hex给个查询语句~

本版积分规则