MYSQL Select If Query-WP自定义字段


MYSQL Select If Query - WP custom fields

我使用的插件允许我从数据库中提取自定义字段值来填充输入字段。该插件是一个计算器表单,它将3个自定义字段相加,每个字段都使用我的原始查询分配给一个输入字段。

现在,如果我使用这个作为我的查询,它工作得很好——

SELECT meta_value AS value FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%>

但是,如果缺少自定义字段值,则会中断我的计算。如何执行选择查询来提取值(如果存在),如果没有,则为其提供值0?

这是我尝试的查询--

if (exists (SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME = 'tr_postmeta' AND COLUMN_NAME = 'pa_meta_debt'))
begin
    SELECT meta_value AS value FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%>
end

但它不起作用,我该如何修改它?

如果值是数字(或可以转换为数字)并且查询最多只能返回1行,则将sum()聚合函数与ifnull()coalesce()一起使用。如果使用sum(),则结果集将始终有1行。如果没有找到匹配的行,则sum()将返回null,必须使用ifnull()coalesce()将其转换为0。

SELECT coalesce(sum(meta_value),0) AS value
FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%>

您还可以选择不更改查询,并且您可以处理处理代码中的无行返回状态,或者执行

SELECT count(*) AS noofrows
FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%>

首先查询,它会告诉您是否有任何匹配的记录。如果您的查询可能返回超过1行,我会使用后一种方法。

您可以使用此

Select Coalesce((SELECT meta_value AS value FROM tr_postmeta WHERE meta_key='pa_meta_debt' AND post_id=<%fieldname5%> Limit 1),0)  As meta_value