2013-04-11 57 views
0

在使用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'。但是我離題了。

+0

屏幕截圖顯示部分而不是全部查詢。如果只運行引用swcustomfieldvalues.fieldvalue爲41的部分,它是否仍然返回該字段中爲null的記錄? – 2013-04-11 00:39:06

+0

嗨丹,更多的添加到上面的描述包括完整的SQL謝謝。 – JComBuilder 2013-04-11 02:26:43

+0

使用'RIGHT OUTER JOIN swuser'的任何特定原因?如果不嘗試'內部連接'99%,這將是獲取空記錄的原因。 – Meherzad 2013-04-11 03:35:26

回答

1

在您的屏幕截圖中,問題顯然很清楚:您將使用嵌套查詢將選擇結果直接返回到主SELECT語句中。

當您過濾fieldvalue ='40'時,此嵌套查詢不返回空值,它只是不返回任何東西(即:不返回任何行),這導致在主SELECT語句中顯示NULL。

如果您想實際篩選出與您所提及的條件不匹配的記錄(fieldvalue),則應在JOIN部分中包含此嵌套子查詢以實際減少結果記錄集。

我不能給你查詢,因爲你沒有粘貼在這裏,但如果你需要我會很樂意提供幫助。

+0

非常感謝Sebas!我爲您的評論添加了討厭的SQL。任何你可以做的事情都很感激。 – JComBuilder 2013-04-11 00:56:41

+0

其中所有嵌套子查詢(在選擇部分中使用的子查詢)哪一個是實際過濾器,哪一個應返回空值(如果沒有記錄返回)? – Sebas 2013-04-11 01:11:04

+0

嗯我不太確定你的預期結果實際上,我需要一些細節 – Sebas 2013-04-11 01:25:03