2012-01-31 136 views
0

您好我寫了這個查詢MySQL查詢修改

SELECT cl_brands.name AS Brand,DATE_FORMAT(cl_doctor_call.date_entered,'%b%y')AS MonthYear, 

SUM(FIND_IN_SET(CONCAT('^',cl_brands.id,'^'),cl_doctor_call_cstm.brand_discussed_c))AS No_Times_Brand_Discussed 
FROM cl_doctor_call LEFT JOIN cl_doctor_call_cstm ON 
cl_doctor_call.id=cl_doctor_call_cstm.id_c 
LEFT JOIN cl_brands ON 
CONCAT('^',cl_brands.id,'^') LIKE CONCAT(cl_doctor_call_cstm.brand_discussed_c, '%') 
WHERE (cl_doctor_call.date_entered) 
BETWEEN CURDATE()-INTERVAL 3 MONTH AND CURDATE() 
GROUP BY cl_brands.name,MonthYear 
ORDER BY No_Times_Brand_Discussed DESC limit 1 

該查詢爲我們提供了與品牌名稱和monthyear討論最高的品牌。

如:

Brand Monthyear No_Times_Brand_Discussed 
    x  Nov11    5 

現在我想展示品牌討論的'同一品牌的'細節過去2個月(這意味着我的查詢應返回結果所有同品牌的詳細信息的詳細過去2個月) 所以我的結果會是這樣的。

Brand Monthyear No_Times_Brand_Discussed 

    x  Nov11    5 
    x  Oct11    0 
    x  Sep11    1 

告訴我如何修改我的上述查詢,以便它能給我這個結果。

回答

0

如果我正在閱讀此權利,本質上,您只需按照日期排列的最受歡迎的品牌的前3名結果。所以,你只需要以同樣的方式查詢你的原始表格,但是包含一個「in」子句,它將你限制在最討論的品牌中。我會使用ID而不是名稱字段,因此您知道它是唯一的。我假設字段名稱是「brand_id」,但在表格中可能有所不同。

select cl_brands.name AS Brand,DATE_FORMAT(cl_doctor_call.date_entered,'%b%y')AS MonthYear, 
SUM(FIND_IN_SET(CONCAT('^',cl_brands.id,'^'),cl_doctor_call_cstm.brand_discussed_c))AS No_Times_Brand_Discussed 
from cl_doctor_call LEFT JOIN cl_doctor_call_cstm ON 
cl_doctor_call.id=cl_doctor_call_cstm.id_c 
LEFT JOIN cl_brands ON 
CONCAT('^',cl_brands.id,'^') LIKE CONCAT(cl_doctor_call_cstm.brand_discussed_c, '%') 
where brand_id in 
(
    SELECT c1.brand_id 
    FROM cl_doctor_call LEFT JOIN cl_doctor_call_cstm ON 
    cl_doctor_call.id=cl_doctor_call_cstm.id_c 
    LEFT JOIN cl_brands ON 
    CONCAT('^',cl_brands.id,'^') LIKE CONCAT(cl_doctor_call_cstm.brand_discussed_c, '%') 
    WHERE (cl_doctor_call.date_entered) 
    BETWEEN CURDATE()-INTERVAL 3 MONTH AND CURDATE() 
    GROUP BY cl_brands.name,MonthY`enter code here`ear 
) 
order by date_entered 
limit 3 
+0

是你的查詢邏輯是正確的,但我現在得到錯誤的結果。如果我們只執行where子句,我們可以得到關於哪個品牌被討論最高次數的細節。但最終的結果與這個結果相沖突......爲什麼如此呢? – Java 2012-01-31 13:35:28

+0

您能否舉一個兩個結果如何不同的例子? – Jody 2012-01-31 20:01:20

+0

where子句將返回所有正在討論的brands_id,這是正確的,但可能因爲錯誤的group by子句我們得不到確切的結果。 (因爲我知道,通過查看數據庫記錄,討論哪個品牌的次數最多) – Java 2012-02-01 07:57:31