【问题标题】:How to check a record for all fields to not be NULL or Empty?如何检查所有字段的记录不为 NULL 或 Empty?
【发布时间】:2019-08-10 18:09:55
【问题描述】:

我有一条来自 MySQL 数据库的记录,需要对其进行验证,以查看是否所有字段都有值或发布一些警报。

最好的方法是将所有字段值放入一个数组中,然后检查 NOT NULL 或 Empty 的 SUM 以查看它是否与所选字段的数量匹配?

示例: $结果 = |价值 |空 |空 |价值 |空|

在此示例中,记录具有来自 5 个字段的值,其中 2 个字段不是 Null 或 Empty

我需要验证以查看所有 5 个字段何时具有某些值

【问题讨论】:

  • 您仍想从数据库中检索此类记录,还是希望修改查询以使此类情况永远不会在结果集中返回?
  • 因为它是有目的的验证,所以任何一个都可以。我正在尝试了解存在哪些选项来更好地理解和技能。如果记录集为空,则可以使用 TotalRows==0(MySQL 会轮询所有选定字段中的值)
  • 你的列有哪些数据类型?
  • 有些是十进制 (4,2),有些是日期。倾向于反向 IN,例如 WHERE NOT NULL IN (column1, column2, column3) 但不确定如何在此类查询中搜索 NOT NULL 或 EMPTY。
  • 无法正常工作的 SQL Fiddle 可能是正确的方向:sqlfiddle.com/#!2/7f995/6

标签: php mysql


【解决方案1】:

您可以使用GREATEST(或LEAST):

SELECT * 
FROM   table1 
WHERE  GREATEST(col1, col2, col3, col4) IS NOT NULL

SQL fiddle

这个想法是GREATEST 需要检查所有参数,因为带有NULL 的表达式将返回NULL(有关该规则的例外情况,请参见here),GREATEST 将返回NULL如果它的任何参数是NULL

上面将过滤符合条件的记录,即没有NULL 值的记录。使用相同的想法,您可以不过滤,但添加有关它是否具有NULL 的信息:

SELECT *, 
       CASE WHEN GREATEST(col1, col2, col3, col4) IS NULL 
           THEN 0 
           ELSE 1
       END AS is_OK
FROM   table1 

现在您将在结果中有一个额外的列,其中包含 0 或 1。它表示您的列是否都不是 NULL

【讨论】:

  • 唯一的问题是我已经知道具体的Record了。所以不是选择最小或最大记录,而是知道所有字段是否都有值。
  • 但是你可以用这个。您将在WHERE 子句中指定 id 条件,然后查看是否得到任何结果。如果是这样,则意味着该记录不包含NULL 值。如果不是,则意味着它确实如此。请参阅我添加的段落,了解如何使用GREATEST
【解决方案2】:

可以直接在mysql查询中进行

WHERE COALESCE('some_field', '') = ''

这将返回每条记录,其中 some_field 为空字符串或 null

更多关于COALESCE函数

【讨论】:

    猜你喜欢
    • 2023-01-28
    • 2014-01-25
    • 2016-02-19
    • 2013-10-20
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    相关资源
    最近更新 更多