MySQL 无法选择特定字段值?

标签 mysql sql null

在使用 MySQL 查询为 Kayako Fusion 生成一些外部报告时,我遇到了一个奇怪且烦人的问题。表中的字段之一包含“TEXT”字段,该字段可以包含两个值之一:41 或 40。如果最终用户未选择其中一个值,则默认值为 NULL。 (我无法改变这一点)。

所以,当尝试做一个简单的事情时:

WHERE swcustomfieldvalues.fieldvalue = '41'

然后它还返回具有 NULL(或可能是 '')值的记录。

这同样适用于:

WHERE swcustomfieldvalues.fieldvalue = '40'

我们还获得了 NULL 记录(这有点准确,因为我们将 NULL 视为 40。

为了简单引用,值 40 表示不收费工作,值 41 表示收费工作。

我缺少什么,或者有解决方法吗?

Screen Shot

这是令人讨厌的原始 SQL 语句:

SELECT
swtickets.ticketid AS `Ticket ID`,
swtickettimetracks.tickettimetrackid AS `Track ID`,
swtickets.ticketmaskid AS `TicketMASK`,
(
    SELECT
        swcustomfieldvalues.fieldvalue
    FROM
        swcustomfieldvalues,
        swcustomfields
    WHERE
        swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
    AND swtickets.ticketid = swcustomfieldvalues.typeid
    AND swcustomfields.title = 'Member Company'
    ORDER BY
        swcustomfieldvalues.customfieldvalueid DESC
    LIMIT 1
) AS MemberCompany,
(
    SELECT
        swcustomfieldvalues.fieldvalue
    FROM
        swcustomfieldvalues,
        swcustomfields
    WHERE
        swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
    AND swtickets.ticketid = swcustomfieldvalues.typeid
    AND swcustomfields.title = 'Member Name'
    ORDER BY
        swcustomfieldvalues.customfieldvalueid DESC
    LIMIT 1
) AS MemberName,
(
    SELECT
        swcustomfieldvalues.fieldvalue
    FROM
        swcustomfieldvalues,
        swcustomfields
    WHERE
        swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
    AND swtickets.ticketid = swcustomfieldvalues.typeid
    AND swcustomfields.title = 'Chargeable'
    AND swcustomfieldvalues.fieldvalue = '41'
    ORDER BY
        swcustomfieldvalues.customfieldvalueid ASC
    LIMIT 1
) AS `Chg`,
swtickets.`subject` AS `Subject`,
swtickets.departmenttitle AS Category,
FROM_UNIXTIME(
    swtickettimetracks.workdateline,
    '%Y-%m-%d'
) AS `workDateline`,
FROM_UNIXTIME(
    swtickettimetracks.dateline,
    '%Y-%m-%d'
) AS `dateline`,
swtickettimetracks.timespent AS `Time Spent`,
swtickets.timeworked / 60 AS `Time Worked`
FROM
    swtickets
RIGHT OUTER JOIN swusers ON swtickets.userid = swusers.userid
INNER JOIN swuserorganizations ON swuserorganizations.userorganizationid = swusers.userorganizationid
INNER JOIN swtickettimetracks ON swtickettimetracks.ticketid = swtickets.ticketid
WHERE
    swuserorganizations.organizationname = 'Clarence Professional Offices'
AND (
    swtickets.ticketstatustitle = 'Closed'
    OR swtickets.ticketstatustitle = 'Completed'
)
AND swtickets.ticketid = '2895'
GROUP BY
    `Ticket ID`,
    `Track ID`

请对我好一点,我是新手;)

分解各个子选择(这是不可避免的),我可以证明,针对特定票证“2895”获取值为“41”的自定义字段“收费”的单个子选择实际上有效!请参阅:

SELECT
        swcustomfieldvalues.fieldvalue,
        swtickets.ticketid

    FROM
        swcustomfieldvalues,
        swcustomfields,
        swtickets
    WHERE
        swcustomfieldvalues.customfieldid = swcustomfields.customfieldid
    AND swtickets.ticketid = swcustomfieldvalues.typeid
    AND swcustomfields.title = 'Chargeable'
    AND swcustomfieldvalues.fieldvalue = '40'
    AND swtickets.ticketid = '2895'
    ORDER BY
        swcustomfieldvalues.customfieldvalueid ASC

它返回 TRUE,因为我知道这张票是不收费的 (40)。如果我将值更改为“41”(收费),它将返回 False(无记录)。

整个 SQL 语句(原始)应返回:在某个日期范围内收费的所有票证,向我显示

票证 ID/票证掩码、轨道 ID、成员(member)公司、成员(member)姓名,是否收费? (40|41),主题、类别、工作日期、日期、花费的时间和工作的时间。

然后在 PHP 中,我做了一些更多的操作来对小计等进行“中断”。但我离题了。

最佳答案

在您的屏幕截图中,问题清楚地显示出来:您使用嵌套查询将选择结果直接返回到主 SELECT 语句中。

当您过滤 fieldvalue = '40' 时,此嵌套查询不会返回 null,它只是不返回任何内容(即:不返回任何行),这会导致在 main 中显示 NULL SELECT 语句。

如果您想实际过滤掉与您提到的条件(字段值)不匹配的记录,那么您应该在 JOIN 部分中包含此嵌套子查询,以实际减少结果记录集。

我无法向您提供查询,因为您没有将其粘贴到此处,但如果您需要,我会很乐意提供帮助。

关于MySQL 无法选择特定字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938902/

相关文章:

mysql - 大查询 : Join single latest row from second table

php - 我怎样才能让我的数据库在这个 "foreach"循环中使用 PHP 更新不止一次?

sql - 如何防止更改某些值的执行计划

针对值的 Mysql 测试排除了 NULL 条目 - 有人可以解释一下吗?

Java "null"值从未分配给我的 Runnable

jquery - 如何对等于 0 的值进行 jquery 验证,但当其为 null/空时则不进行验证

mysql - 如何从多个表中选择值后插入

php - 如何将 HTML 标签的类值传递给 php 变量

sql - 如何在 MonetDB 中发现给定索引或键的列

php - 如何在 PHP 中解密由 SQL Server 的 EncryptByPassPhrase() 加密的字符串?