私はこのようなクエリを持っています:
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つの異なるテーブルから取得されます。条件、フォーマットなどは、テーブルの1つからの設定ごとに、日付を東部から特定のタイムゾーンに変換することです。
確かに見栄えの良いクエリではありません:-)。これが理由です、私はクエリでこれらすべての奇抜なことをしようとしています。
- これらの結果は配列として返され、JSONとしてエンコードされて、呼び出し元に返送されます。
- PHPで結果をループする必要はありません。結果をそのまま渡すことができます。
- 不要な余分な列について心配する必要はありません。必要な列だけを引っ張ることができます。
これは私にとってうまく機能しています!
ただし、パフォーマンスおよびその他の設計の観点からは、次のようになります。
質問:そのままにしておくのは良いですか、それともPHPで処理を行うことを考える必要がありますか?クエリの複雑さを取り除くときは、2つのことを行う必要があります(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
それがすべて「どこ」の条件です。テーブル名とフィールド名は無視してください。私はそれらを変更しました。