请教大家一个SQL查询效率问题
数据表的仨个字段:`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' ORvisible='friends' OR share=1) AND status='normal'
条件语句有错吗?有更好的条件查询吗?感激不尽!
PS:目的是不读取visible="public" AND share=0的记录,其他全部读取。其中share=0的记录占全部记录的80%左右
[ 本帖最后由 hnmazda 于 2008-10-31 14:00 编辑 ] 试试这个怎么样。
WHERE status = 'normal' AND ( visible = "public" AND share = 1 OR visible in("private","friends"))
OR操作要尽量避免交集把。 在一个括号里面有AND和OR,俺理解不了呀。。优先级是怎么样子的,从左至右吗?
( visible = "public" AND share = 1 OR visible in("private","friends"))
那不就是visible 都是public的了? 有 OR 和 AND 一定要用括号!否则就很难理解了。 Hex给个查询语句~
页:
[1]