mysql select 作为条件查询,在mysql查询条件where中使用case根据字段条件查询

在使用mysql的时候有时候会遇到,根据字段的不同值产生不同的判断条件,也就是在mysql查询条件where中使用case根据字段条件查询

也许这样说的时候,意思还是表达不清楚,来看个需求吧

我有2个表--

-- 表的结构 `advertiser_category_brand`

--

CREATE TABLE IF NOT EXISTS `advertiser_category_brand` (

`advertiser_id` int(11) NOT NULL COMMENT '广告主id',

`ad_category_id` int(11) NOT NULL COMMENT '分类id',

`ad_brand_id` int(11) NOT NULL COMMENT '品牌id'

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='广告主品类品牌绑定表';

--

-- 转存表中的数据 `advertiser_category_brand`

--

INSERT INTO `advertiser_category_brand` (`advertiser_id`, `ad_category_id`, `ad_brand_id`) VALUES

(32, 33, 0),

(58, 25, 22),

(61, 31, 23),

(63, 41, 34),

(67, 33, 24);--

-- 表的结构 `ad_brand`

--

CREATE TABLE IF NOT EXISTS `ad_brand` (

`ad_brand_id` int(11) NOT NULL COMMENT '广告品牌id',

`ad_brand_name` varchar(40) NOT NULL DEFAULT '' COMMENT '广告品牌名称',

`ad_category_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '品牌所属分类id'

) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='广告品牌';

--

-- 转存表中的数据 `ad_brand`

--

INSERT INTO `ad_brand` (`ad_brand_id`, `ad_brand_name`, `ad_category_id`) VALUES

(8, '小米手机', 36),

(7, '华为手机', 36),

(6, '海飞丝', 25),

(9, '三星手机', 36),

(10, '苹果手机', 36),

(11, '博朗', 28),

(12, '玉兰油', 29),

(13, '天翼手机', 36),

(14, '一汽大众', 30),

(15, '网易游戏', 31),

(16, '78游戏中心', 31),

(17, 'QQ空间游戏', 31),

(18, '特仑苏', 32),

(19, '唯品会', 33),

(20, '广发银行', 34),

(21, '建设银行', 34),

(22, '力士LUX', 25),

(23, '谷果游戏广告平台', 31),

(24, '大众点评', 35),

(25, '快的', 35),

(26, 'Intel英特尔', 36),

(27, '北联', 38),

(28, 'Mobvista', 31),

(29, '阳狮', 38),

(30, 'Miaozhen', 38),

(31, '品友互动', 41),

(32, '多盟', 39),

(33, 'MediaV', 41),

(34, '舜飞BiddingX', 41),

(35, '测聘网', 42),

(36, 'RTBChina', 41),

(37, 'Ad7', 41),

(38, 'INFIPLAY.RU', 31),

(39, '有爱互动', 31),

(40, '奥奇智慧OKidea', 38);

其中表advertiser_category_brand中如果ad_brand_id字段值为0则表示ad_category_id下的所有ad_brand_id都关联了

查询SQL如下 注意case end用括号包含起来,不然会出错SELECT advertiser_category_brand.advertiser_id,GROUP_CONCAT(ad_brand.ad_brand_name) as brandname

FROM advertiser_category_brand LEFT JOIN ad_brand ON(advertiser_category_brand.ad_category_id = ad_brand.ad_category_id )

WHERE (CASE WHEN advertiser_category_brand.ad_brand_id>0 THEN advertiser_category_brand.ad_brand_id=ad_brand.ad_brand_id ELSE TRUE END)

GROUP BY advertiser_category_brand.advertiser_id

当然还有一个数据库的解决办法,就是advertiser_category_brand表中ad_brand_id不要存储0,全部都存储有关联的值,这样解决应该会比较好,但因为较多的地方使用了该数据库,如果改动存储方式,前端也需要更改,懒人办法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值