在使用MySQL查詢爲Kayako Fusion生成一些外部報告時,我遇到了一個奇怪而煩人的問題。表格中的一個字段包含一個'TEXT'字段,其中可以包含以下兩個值中的一個:41或40.如果最終用戶沒有選擇其中一個值,則默認值爲NULL。 (我無法改變這一點)。MySQL無法選擇特定的字段值?
所以,試圖做一個簡單的當:
WHERE swcustomfieldvalues.fieldvalue = '41'
然後,它也返回記錄用NULL(或者「」)值。
這同樣適用於:
WHERE swcustomfieldvalues.fieldvalue = '40'
,我們也得到了NULL記錄(因爲我們把NULL作爲40
單純作爲參考這是一種精確的40值是對非收費工作和41的值是收費的工作。
我缺少什麼,還是有解決方法嗎?
Screen Shot http://i48.tinypic.com/25g71p3.png
這裏是討厭原來的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`
請善待我,我是一個新手;)
突圍各個子選擇(這是不可避免的),我可以證明這個個人獲得的價值'41'的自定義字段'收費'與特定的票2895'實際上工作!見:
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),主題,類別,WorkDateline,日期,花費的時間和工作時間。
然後在PHP中,我做了一些更多的操作來爲Sub Totals等做一個'Break On'。但是我離題了。
屏幕截圖顯示部分而不是全部查詢。如果只運行引用swcustomfieldvalues.fieldvalue爲41的部分,它是否仍然返回該字段中爲null的記錄? – 2013-04-11 00:39:06
嗨丹,更多的添加到上面的描述包括完整的SQL謝謝。 – JComBuilder 2013-04-11 02:26:43
使用'RIGHT OUTER JOIN swuser'的任何特定原因?如果不嘗試'內部連接'99%,這將是獲取空記錄的原因。 – Meherzad 2013-04-11 03:35:26