Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL无法选择特定的字段值?_Mysql_Sql_Null - Fatal编程技术网

MySQL无法选择特定的字段值?

MySQL无法选择特定的字段值?,mysql,sql,null,Mysql,Sql,Null,在使用MySQL查询为Kayako Fusion生成一些外部报告时,我遇到了一个奇怪而恼人的问题。表中的一个字段包含一个“文本”字段,该字段可以包含两个值中的一个:41或40。如果最终用户未选择其中一个值,则默认值为NULL。(我无法改变这一点) 因此,在尝试执行简单的操作时: WHERE swcustomfieldvalues.fieldvalue = '41' 然后,它还返回具有空值(或者可能为“”)的记录 这同样适用于: WHERE swcustomfieldvalues.fieldva

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

因此,在尝试执行简单的操作时:

WHERE swcustomfieldvalues.fieldvalue = '41'
然后,它还返回具有空值(或者可能为“”)的记录

这同样适用于:

WHERE swcustomfieldvalues.fieldvalue = '40'
我们还得到空记录(这有点准确,因为我们将空视为40)

为便于参考,40的值用于非收费工作,41的值用于收费工作

我遗漏了什么,或者有解决办法吗

以下是原始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”的自定义字段“Chargeable”的单个子选择实际上是有效的!见:

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、会员公司、会员姓名、是否收费?(40 | 41)、主题、类别、工作地点、日期、花费的时间和工作时间


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

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

当筛选fieldvalue='40'时,此嵌套查询不返回NULL,它只是不返回任何内容(即:不返回任何行),这导致在主SELECT语句中显示NULL

如果您想实际筛选出与您提到的条件(fieldvalue)不匹配的记录,那么您应该在连接部分中包含此嵌套子查询,以实际减少生成的记录集


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

屏幕截图显示了部分但不是全部查询。如果只运行引用swcustomfieldvalues.fieldvalue为41的部分,它是否仍返回该字段中为null的记录?嗨,丹,上面的描述中添加了更多内容,包括完整的SQL谢谢。使用
右外部连接swusers
的具体原因是什么?如果不尝试使用
内部联接
99%,这将导致获取空记录。它返回TRUE或FALSE是什么意思?
swcustomfieldvalues.fieldvalue
在这两种情况下的值是多少?非常感谢您!我已经为你的评论添加了讨厌的SQL。非常感谢您提供的任何帮助。在您所有的嵌套子查询(选择部分中使用的子查询)中,哪一个是真正的过滤器,如果没有返回记录,哪一个应该返回null?嗯,我不太确定您的预期结果是什么,实际上,我需要一些详细信息。请参阅上面添加到我的问题中的其他信息。(再次)谢谢你!