MYSQL Select If Query - WP 自定义字段

Posted

技术标签:

【中文标题】MYSQL Select If Query - WP 自定义字段【英文标题】:MYSQL Select If Query - WP custom fields 【发布时间】:2016-03-22 05:34:40 【问题描述】:

我正在使用一个插件,它允许我从数据库中提取自定义字段值来填充输入字段。该插件是一个计算器表单,它添加了 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

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

【问题讨论】:

在这个特定的上下文中 meta_value 是数字吗?您希望上述查询返回 1 行还是多行? 是的,元值都是数字。至于行我不确定,我对 mysql 不太熟悉 如果您运行查询,它返回多少行(如果有命中):1 或更多? 【参考方案1】:

如果值是数字(或可以转换为数字)并且查询最多只能返回1行,则使用sum()聚合函数ifnull()或@987654323 @。如果您使用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 行,我会使用后一种方法。

【讨论】:

谢谢。我使用的第一个代码,它根据需要工作。它没有解决我的插件问题:(但它确实回答了我的问题并正确运行。【参考方案2】:

你可以用这个

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

【讨论】:

谢谢,但它不起作用。目前该字段中的值为 800,000,但现在它使用您的代码不返回任何内容。有什么想法吗? 如果查询没有返回任何行,那么 coalesce() 将不会运行。这就是我问数据类型和行数的原因。 您是否将查询放在 if 语句中?如果是十,如果 if 为假,则选择语句。使用不带 if 语句的代码。 合并正在检查整个 select 语句,它不在 select 内。因此,如果没有行返回,它将选择零

以上是关于MYSQL Select If Query - WP 自定义字段的主要内容,如果未能解决你的问题,请参考以下文章

在 mySQL SELECT 语句中使用嵌套的 IF

mysql数据导出并分页

MySQL Select 中的 If 语句

MySQL存储过程返回0行

MySQL PDO INSERT ... SELECT IF 语句不起作用

MySQL查询中的逗号