【发布时间】:2014-03-06 14:02:08
【问题描述】:
问题就像标题所说的那样简单,但这是一个逻辑。 这是我的代码
CREATE TABLE `inf_brand_images` (
`id` bigint(99) NOT NULL AUTO_INCREMENT,
`brand` varchar(255) NOT NULL,
`thumb` text NOT NULL,
`is_active` int(2) NOT NULL DEFAULT '1',
`cmp_brand` varchar(1024) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6458 DEFAULT CHARSET=latin1
这是该表中的数据
ID | brand | thumb |is_active| cmp_brand
1 | NIKE | a.png | 1 |
2 | DUNHILL| b.png | 1 |
3 | NIKE | c.png | 1 | 123_NIKE
4 | NIKE | d.png | 1 | 789_NIKE
cmp_brand 在我的例子中以 123_ 和 789_ 之类的 id 为前缀。 现在如果我搜索 NIKE,所以我有两个参数,一个是 NIKE,另一个是 id_NIKE。其中 id 可能是 123 或 456 或任何其他。所以对于 NIKE 搜索我有两个参数,一个是品牌 = NIKE,另一个是 cmp_brand =123_NIKE(我可以自动将 id 与品牌名称连接起来)
我想要的是
IF cmp_brand is '' then compare with brand ELSE compare brand AND cmp_brand.
这是我试过的,都不起作用
SELECT thumb
FROM inf_brand_images
where is_active=1 AND
CASE WHEN cmp_brand = '' THEN brand='NIKE'
ELSE cmp_brand='123_NIKE' END
SELECT thumb
FROM inf_brand_images
where is_active=1 AND
((cmp_brand = '' AND brand='NIKE') OR (cmp_brand='123_NIKE'))
【问题讨论】:
-
我希望您的第二个查询能够正常工作。这是处理它的正确方法(逻辑分组 AND/OR,不是 CASE)sqlfiddle.com/#!2/d176b
-
对于此查询,您是否期望得到与
ID=1, ID=3不同的结果?根据我的阅读,这是预期的结果。 -
第二个查询给我记录号 1,3 但我只需要 3.mean 我只需要 c.png
-
好的,所以您想首选
cmp_brand匹配而不是brand匹配? -
当心!有时 rdms 系统将零长度字符串表示为 NULL 值。在这种情况下,
column = ''不会是真的,但column IS NULL会是。