我正在尝试找到一种纯粹的MySQL方法来避免大量重复/类似的PHP脚本。
假设我在表格中选择了一行,它可能如下所示:
| col1 | col2 | col3 | col4 | col5 | col6 |
| abc |b b a | '%kj | jh | | |
我想要COUNT该行中有多少列不为空。所以在这个例子中它是4。
我提出了一个解决方案,我在其中运行一个计数查询,其中col1对于id = X不为空,然后运行6次并将结果加起来。但是我觉得这肯定是非常低效的,我想不出更好的方法。
有人知道如何才能提高效率吗?
答案 0 :(得分:2)
试试这个
SELECT
COUNT(NULLIF(col1,'')),
COUNT(NULLIF(col2,'')),
COUNT(NULLIF(col3,'')),
COUNT(NULLIF(col4,'')),
COUNT(NULLIF(col5,'')),
COUNT(NULLIF(col6,''))
FROM yourTableName
我在当地phpMyAdmin
尝试过,效果很好。 :)
答案 1 :(得分:0)
要计算每行中的非空值,请使用:
SELECT
CASE WHEN col1 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN col2 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN col3 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN col4 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN col5 IS NOT NULL THEN 1 ELSE 0 END +
CASE WHEN col6 IS NOT NULL THEN 1 ELSE 0 END
FROM my_table;