首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql在哪里使用和用例条件

Mysql在哪里使用和用例条件
EN

Stack Overflow用户
提问于 2014-09-08 20:13:05
回答 2查看 94关注 0票数 0

当我的过程中给定的平台变量不是null时,我想添加where。

-编辑--

好吧,这是个程序。基于用户选择的程序筛选结果。(平台选择)

因此,在过程中声明了platform变量。如果用户向过程发送任何平台If,则必须使用platform变量对结果进行筛选。但是,如果platform变量为null或未定义,则获得所有结果。

注意:我想找到一种方法,在CASE语句中包含多个平台ID

您可以在下面找到完整的代码。

-/编辑--

代码语言:javascript
复制
(
SELECT gn.title, gn.slug, gn.created_at, gn.content, gi.image, 'news' as `type` FROM `game_news` gn 
CROSS JOIN `gallery_images` gi ON gi.foreign_key = gn.id
CROSS JOIN `game_platforms` gp
LEFT JOIN `game_news_platform_relation` gnpr ON gnpr.news_id = gn.`id` 
WHERE gi.gallery_id = 7 AND gi.is_main = '1' AND `gi`.`thumbnail_id` = 16 AND gn.deleted_at IS NULL AND gi.deleted_at IS NULL
AND (
    CASE 
        WHEN platform is NOT NULL 
            THEN gnpr.platform_id IN(platform)
    END
    )
GROUP BY gn.id
)
UNION ALL
(
SELECT gr.title, gr.slug, gr.created_at, gr.content, gi.image, 'review' as `type` FROM `game_reviews` gr 
CROSS JOIN `gallery_images` gi ON gi.foreign_key = gr.id
CROSS JOIN `game_platforms` gp
LEFT JOIN `game_review_platform_relation` grpr ON grpr.review_id = gr.`id` 
WHERE gi.gallery_id = 6 AND gi.is_main = '1' AND `gi`.`thumbnail_id` = 14 AND gr.deleted_at IS NULL AND gi.deleted_at IS NULL
AND (
    CASE 
        WHEN platform is NOT NULL 
            THEN grpr.platform_id IN(platform) 
    END
    )
GROUP BY gr.id
)
ORDER BY created_at DESC
LIMIT post_offset, post_limit

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-08 20:27:31

要在大小写中使用IN(),它必须位于WHEN部分,这样您就可以这样做了。

代码语言:javascript
复制
AND
(   CASE
      WHEN platform IS NOT NULL AND gnpr.platform_id IN(platform)
      THEN gnpr.platform_id
      ELSE 1
    END
)

您也可以添加另一个什么时候拉到像这样的东西。

代码语言:javascript
复制
AND
(   CASE
      WHEN platform IS NOT NULL AND gnpr.platform_id IN(platform)
      THEN gnpr.platform_id
      WHEN platform IS NULL
      THEN gnpr.platform_id
    END
)
票数 1
EN

Stack Overflow用户

发布于 2014-09-08 20:23:59

为什么不在where子句上使用case,而是使用从您的表到平台的左联接。然后,在where子句上,如果platform.ID不是null,则计算。希望这个想法对你有帮助。

编辑

如果要在WHERE子句中使用CASE,则需要将其转换为布尔值。就像这样:

代码语言:javascript
复制
SELECT p FROM Table WHERE (CASE WHEN Machine ='myMachine' THEN 1 ELSE 0 END) = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25732421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档