在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
复制内容到剪贴板
- --
- -- 表的结构 `表A`
- --
- CREATE TABLE IF NOT EXISTS `表A` (
- `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '关注ID',
- `user_id` int(11) NOT NULL COMMENT '用户名ID',
- `user_follow_id` int(11) NOT NULL COMMENT '被关注用户ID',
- `iscarer` tinyint(2) NOT NULL DEFAULT '0' COMMENT '角色A关注为好友1是0否2忽略',
- `ishelper` tinyint(2) NOT NULL DEFAULT '0' COMMENT '角色B关注师傅1是0否2忽略',
- `issupplier` tinyint(2) NOT NULL DEFAULT '0' COMMENT '角色C关注服务商1是0否2忽略',
- `insert_time` varchar(20) NOT NULL COMMENT '增加时间',
- PRIMARY KEY (`uid`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户关系关注表' AUTO_INCREMENT=21 ;
2.增加好友动态表
SQL Code
复制内容到剪贴板
- --
- -- 表的结构 `表B`
- --
- CREATE TABLE IF NOT EXISTS `表B` (
- `uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '消息ID',
- `type` tinyint(4) NOT NULL COMMENT '用类型 1车主文章2,关注文章,3提问,4,调查,5订单信息',
- `user_id` int(11) NOT NULL ,
- `event_message` text NOT NULL COMMENT '动态数据序列化',
- `insert_time` varchar(20) NOT NULL,
- PRIMARY KEY (`uid`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='好友动态表' AUTO_INCREMENT=3 ;
3.好友动态总记录如下:
sql如下:
SQL Code
复制内容到剪贴板
- SELECT
- *
- FROM
- 表A f
- LEFT JOIN(
- SELECT
- type,
- user_id AS author_id,
- event_message
- FROM
- 表B
- )e ON f.user_follow_id = e.author_id
- WHERE
- user_id = 275
- AND iscarer = 1
- AND type IS NOT NULL
结果3条数据如下:
4.加上B角色去判断sql如下:
SQL Code
复制内容到剪贴板
- SELECT
- *
- FROM
- 表A f
- LEFT JOIN(
- SELECT
- type,
- user_id AS author_id,
- event_message
- FROM
- 表B
- )e ON f.user_follow_id = e.author_id
- WHERE
- IF(ishelper = 0, type <> 2, '1=1')
- AND user_id = 275
- AND iscarer = 1
- AND type IS NOT NULL
结果2条数据如下:
4.加上C角色去判断sql如下:
SQL Code
复制内容到剪贴板
- SELECT
- *
- FROM
- 表A f
- LEFT JOIN(
- SELECT
- type,
- user_id AS author_id,
- event_message
- FROM
- 表B
- )e ON f.user_follow_id = e.author_id
- WHERE
- IF(ishelper = 0, type <> 2, '1=1')
- AND
- IF(issupplier = 0, type <>5, '1=1')
- AND user_id = 275
- AND iscarer = 1
- AND type IS NOT NULL
结果1条数据如下:
好了,达到了想要的效果了。
PS:后面where是可以根据索引值来条件先后顺序
SQL Code
复制内容到剪贴板
- WHERE
- user_id = 275
- AND iscarer = 1
- AND type IS NOT NULL
- AND
- IF(ishelper = 0, type <> 2, '1=1')
- AND
- IF(issupplier = 0, type <>5, '1=1')