mysql中where+if判断

在mysql中where中多重条件if判断,项目需求如下:
好友关系中本身具有A,B,C三种角色,好友动态分为1,2,3,4,5种类型。A是必须具有的角色,如果具有A角色可查好友动态类型1,3,4 的信息如果具有B角色可查2类型信息,如果具有C角色可查5类型角色。
实现思想如下:先查出好友关系所有动态数据-》判断B角色增加筛选2类型-》判断C角色增加筛选5类型
下面说说实现步聚,具体添加的数据不在这里说明了。
1.增加关系表

SQL Code 复制内容到剪贴板
  1. --  
  2. -- 表的结构 `表A`  
  3. --  
  4.   
  5. CREATE TABLE IF NOT EXISTS `表A` (  
  6.   `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '关注ID',  
  7.   `user_id` int(11) NOT NULL COMMENT '用户名ID',  
  8.   `user_follow_id` int(11) NOT NULL COMMENT '被关注用户ID',  
  9.   `iscarer` tinyint(2) NOT NULL DEFAULT '0' COMMENT '角色A关注为好友1是0否2忽略',  
  10.   `ishelper` tinyint(2) NOT NULL DEFAULT '0' COMMENT '角色B关注师傅1是0否2忽略',  
  11.   `issupplier` tinyint(2) NOT NULL DEFAULT '0' COMMENT '角色C关注服务商1是0否2忽略',  
  12.   `insert_time` varchar(20) NOT NULL COMMENT '增加时间',  
  13.   PRIMARY KEY (`uid`)  
  14. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='用户关系关注表' AUTO_INCREMENT=21 ;  

2.增加好友动态表

SQL Code 复制内容到剪贴板
  1. --  
  2. -- 表的结构 `表B`  
  3. --  
  4.   
  5. CREATE TABLE IF NOT EXISTS `表B` (  
  6.   `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '消息ID',  
  7.   `type` tinyint(4) NOT NULL COMMENT '用类型 1车主文章2,关注文章,3提问,4,调查,5订单信息',  
  8.   `user_id` int(11) NOT NULL ,  
  9.   `event_message` text NOT NULL COMMENT '动态数据序列化',  
  10.   `insert_time` varchar(20) NOT NULL,  
  11.   PRIMARY KEY (`uid`)  
  12. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='好友动态表' AUTO_INCREMENT=3 ;  


3.好友动态总记录如下:
sql如下:

SQL Code 复制内容到剪贴板
  1. SELECT  
  2.     *  
  3. FROM  
  4.     表A f  
  5. LEFT JOIN(  
  6.     SELECT  
  7.         type,  
  8.         user_id AS author_id,  
  9.         event_message  
  10.     FROM  
  11.         表B 
  12. )e ON f.user_follow_id = e.author_id  
  13. WHERE  
  14. user_id = 275  
  15. AND iscarer = 1  
  16. AND type IS NOT NULL  

结果3条数据如下:

4.加上B角色去判断sql如下:

SQL Code 复制内容到剪贴板
  1. SELECT  
  2.     *  
  3. FROM  
  4.     表A f  
  5. LEFT JOIN(  
  6.     SELECT  
  7.         type,  
  8.         user_id AS author_id,  
  9.         event_message  
  10.     FROM  
  11.         表B 
  12. )e ON f.user_follow_id = e.author_id  
  13. WHERE  
  14. IF(ishelper = 0, type <> 2, '1=1')  
  15. AND user_id = 275  
  16. AND iscarer = 1  
  17. AND type IS NOT NULL  

结果2条数据如下:

4.加上C角色去判断sql如下:

SQL Code 复制内容到剪贴板
  1. SELECT  
  2.     *  
  3. FROM  
  4.     表A f  
  5. LEFT JOIN(  
  6.     SELECT  
  7.         type,  
  8.         user_id AS author_id,  
  9.         event_message  
  10.     FROM  
  11.         表B 
  12. )e ON f.user_follow_id = e.author_id  
  13. WHERE  
  14.   
  15. IF(ishelper = 0, type <> 2, '1=1')  
  16. AND  
  17. IF(issupplier = 0, type <>5, '1=1')  
  18. AND user_id = 275  
  19. AND iscarer = 1  
  20. AND type IS NOT NULL  

结果1条数据如下:

好了,达到了想要的效果了。
PS:后面where是可以根据索引值来条件先后顺序

SQL Code 复制内容到剪贴板
  1. WHERE  
  2. user_id = 275  
  3. AND iscarer = 1  
  4. AND type IS NOT NULL  
  5. AND  
  6. IF(ishelper = 0, type <> 2, '1=1')  
  7. AND  
  8. IF(issupplier = 0, type <>5, '1=1')  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值