我有一个这样的查询:
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 中的结果。我可以按原样传递结果。
- 我不必担心我不需要的额外列。我只能拉出需要的列。
这对我来说非常有用!
但是,从性能和其他设计角度来看:
问题:保持原样好还是我需要考虑在 PHP 上进行处理?当我消除查询中的复杂性(If、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 的所有“位置”。忽略表名和字段名。我改变了它们。