php - MySQL 查询中的 CONCAT 值忽略 NULL 值

标签 php mysql

我想连接 8 个字段(sp、lp、gp、sr、zd、md、pr、rs)中的值,并将结果返回为“化学”。问题是任何一条记录在 8 个可能的值中只有两个(可能三个或四个)值,其余值将为 NULL。此外,如果该值为 NULL,我既不希望显示前面的文本(SP:、LP:、GP:、SR: 等...),也不希望显示(换行符)。

通过对此处的研究,我发现了 CONCAT_WS() 和 IFNULL()。为了实现我想要的结果,我需要帮助来实现这些功能。

    CONCAT(
      'SP: ', sp, '<br />',
      'LP: ', lp, '<br />',
      'GP: ', gp, '<br />',
      'SR: ', sr, '<br />',
      'ZD: ', zd, '<br />',
      'MD: ', md, '<br />',
      'PR: ', pr, '<br />',
      'RS: ', rs
    ) AS chemistry

最佳答案

您可以在此处使用两个事实:首先,CONCAT (与许多其他 SQL 函数一样)返回 NULL如果任何参数是 NULL ;第二,CONCAT_WS将跳过 NULL值。

这使得查询变得像...一样简单

CONCAT_WS('<br />',
   CONCAT('SP:', sp),
   CONCAT('LP:', lp),
   ...
) AS chemistry

说了这么多,我真的想知道是否有必要在查询(数据库)级别进行这种格式化。首先,使用 <br />分离元素实际上只是表示的一个细节——而且它的变化比你希望的要频繁得多。其次,在应用程序级别编写和调整此代码可能要容易得多 - 例如,通过使用循环。

关于php - MySQL 查询中的 CONCAT 值忽略 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18832655/

相关文章:

PHP正则表达式删除除数字和句点以外的所有字符

php - 使用 PHP 更新 MySQL

mysql - 在 MySQL 5.7.20 中,两个 TEXT 列上的 SELECT DISTINCT 速度较慢

mysql - 优化 ORDER BY

php - 我们向用户提示的详细信息(通过 php 编码)未显示在 MySQL 数据库(本地主机)中

php - DOCKERized PHP 应用程序中的 Sendmail 不起作用

MySQL if 变量则显示结果 + 具体结果

php - Eloquent(没有 Laravel)从具有动态名称的表中获取数据

java - 为什么我在插入数据时收到 SqlMapException?

php - 在我的表 : It shows one record less 中显示记录时出错