【问题标题】:Determining the actual value of a record when it fails in a OR query在 OR 查询中失败时确定记录的实际值
【发布时间】:2019-05-18 00:20:59
【问题描述】:

我有一个运行正常的简单查询,但需要检查的条件很少。这是使用 AND 运算符完成的,我想知道当 OR 条件失败时我们如何确定实际值。

场景: 我们有 3 列 is_blocked、is_verified、is_active 假设第 1 行有

is_blocked=0
is_verified=0
is_active=0

当每个条件失败时,抛出的消息必须不同。

if (is_blocked==1) msg=your account has been blocked.
if (is_active==0) msg=your account is no longer active.
if (is_verified==0) msg=you need to verify your account.

查询 1:

"
SELECT * 
  from users 
 WHERE is_blocked = 0 
   AND is_verified = 1 
   AND is_active = 0 
   AND emailid = 'emailid'
"

对于上面的例子,上面的查询将返回 FALSE 值。有没有办法让我通过单个查询来确定查询中的哪个条件失败,以及实际值是什么。 所以预期的输出将是 is_verified=1

我尝试过在 PHP 中使用类似这样的 if 条件。

if (is_blocked=0) 
SELECT * from users users WHERE is_verified=1 AND is_active=1

等等…… 我不确定这是否是一个好习惯。

【问题讨论】:

  • SELECT is_blocked = 0, is_verified = 1, is_active = 0, emailid = 'emailid' FROM users;
  • @Strawberry 这不起作用,因为我希望输出指出查询中的哪个条件导致查询失败。在这种情况下,它应该说 is_verified=0。这样我们就知道查询失败了,因为 is_verified 的值为 0
  • @AbraCadaver 我没有检查链接,现在会检查。但我相信 CASE 会像 if 条件一样,我试图找出一种方法让查询说条件失败,因为其中一个变量的值不正确并且变量名是 is_verified =0 我会检查链接虽然.. 谢谢分享
  • 我猜我们对“失败”的定义不同

标签: php mysql


【解决方案1】:

使用CASE 表达式:

SELECT CASE 
    WHEN is_blocked = 1 THEN 'your account has been blocked'
    WHEN is_active = 0 THEN 'your account is no longer active'
    WHEN is_verified = 0 THEN 'you need to verify your account'
    END AS reason
from users
WHERE emailid = 'emailid'

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2023-02-14
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多