1
我有這樣的查詢:計算:複雜的查詢與PHP函數調用在一個循環中
Select E.ID, E.NAME,
date_format( CONVERT_TZ(CONVERT_TZ(E.ST, '+00:00', '+5:00'),
'+00:00', if(ET.GT LIKE '%.5', REPLACE(ET.GT, '.5', ':30') , CONCAT(ET.GT, ':00')
)), '%Y-%m-%e %r'), concat(date_format( CONVERT_TZ(CONVERT_TZ(E.ET, '+00:00',
'+5:00') , '+00:00', if(ET.GT LIKE '%.5', REPLACE(ET.GT, '.5', ':30') , CONCAT(
ET.GT, ':00'))), '%Y-%m-%e %r') , ' ', if (TC is NULL, '', concat(TC, 'T'))),
EE.CL, EC.EC, CONCAT('##PATH##', E.ID, '/')
並且這些字段是由4個不同的表拉昇。條件,格式化東西等是將來自東部的日期轉換爲來自其中一個表的每個設置的特定時區。
當然不是一個漂亮的查詢:-)。這是原因,我試圖在查詢中完成所有這些古怪的事情。
- 這些結果以數組形式返回,然後編碼爲JSON併發送回調用方。
- 我不必循環瀏覽PHP中的結果。我可以按照原樣傳遞結果。
- 我不必擔心額外的列,我不需要。我只能拉只需要的列。
這對我來說太棒了!
但是,從性能和其他設計的角度來看(S):
問題:這是很好的保持原樣或我需要考慮一下關於PHP做處理? 我會做兩件事情,當我不再複雜查詢(如果CONVERT_TZ等)
- 遍歷返回的數組,並調用一個函數來計算時區。
- 刪除不必要的數組元素。
您的想法?
編輯:
這裏是連接:
LEFT JOIN eeemps EER ON e.id = EER.eid
LEFT JOIN eemp Ee ON eer.empid = ee.empid
LEFT JOIN EclassS EC ON E.EVN = EC.E_ID
LEFT JOIN E_tz NE ET ON E.TZID = ET.ID
where date between x and y, and e_id = 123
這就是所有 「其中」 cond是。忽略表格和字段名稱。我改變了他們。
顯示查詢的左側部分。 'SELECT'子句永不是瓶頸 – zerkms
增加了連接。 「哪裏」的情況並不複雜。 –
對此有何想法? –