gpt4 book ai didi

MySQL 无法选择特定字段值?

转载 作者:行者123 更新时间:2023-11-29 13:55:26 24 4
gpt4 key购买 nike

在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com