简体   繁体   English

MySQL子句在什么情况下

[英]MySQL clause in where `case when`

I am trying to figure it out but no solution at all. 我试图弄清楚,但根本没有解决方案。 My query : 我的查询:

SELECT * FROM table
WHERE owner = 'user'
AND (
    CASE WHEN status = 'NEW'
    THEN status = 'NEW'
    ELSE status IN ('CB','NA','NI','GC','FC')
    END
)
ORDER BY RAND() DESC
LIMIT 1;

What I want to achieve is to show all records where status is NEW in an Random order limited by one row each, when no records NEW for the user the query needs to show the other statuses . 我要实现的是以Random order显示所有statusNEW所有记录,每条记录限制one row ,当没有NEW记录供用户查询时,查询需要显示其他statuses

Thank you. 谢谢。

SELECT * FROM Table
WHERE owner = 'user'
AND (CASE WHEN (SELECT COUNT(*) FROM Table WHERE status = 'NEW') >= 1 THEN
                status = 'NEW'
     ELSE status IN ('CB','NA','NI','GC','FC')
     END)
ORDER BY RAND() DESC
LIMIT 1;

Demo 演示

http://sqlfiddle.com/#!9/09b1c8/1 http://sqlfiddle.com/#!9/09b1c8/1

What i think, you can simply 我的想法,你可以简单地

SELECT * FROM table
WHERE owner = 'user'
AND (
   CASE WHEN status = 'NEW'
   THEN status = 'NEW'
   ELSE status IN ('CB','NA','NI','GC','FC')
   END
)
ORDER BY RAND() DESC
LIMIT 1;

To

SELECT * FROM table
WHERE owner = 'user' AND status IN ('NEW','CB','NA','NI','GC','FC')
GROUP By some_id
ORDER BY RAND() DESC
LIMIT 1;
SELECT * FROM table
    WHERE owner = 'user'
      AND status IN ('NEW', 'CB','NA','NI','GC','FC')
    ORDER BY status = 'NEW' DESC,
             RAND() DESC
LIMIT 1;

Will give you a total of 1 row, giving preference to a random 'NEW'. 总共会给您1行,优先选择随机的“ NEW”。 If no 'NEW' rows, then a random one of the others. 如果没有“ NEW”行,则随机选择其他行。

(Please clarify your Question and provide sample output.) (请澄清您的问题并提供示例输出。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM