在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')