コンテンツ管理>CSV出力項目設定>高度な設定に設定する SQL 文
実際にフォームに入力するときは、1 行目の SELECT は入力しません。また、最後の 1 文の ; も入力しません。
SELECT dtb_order.order_id, dtb_order.customer_id, dtb_order.message, dtb_order.order_name01, dtb_order.order_name02, dtb_order.order_kana01, dtb_order.order_kana02, dtb_order.order_email, dtb_order.order_tel01, dtb_order.order_tel02, dtb_order.order_tel03, dtb_order.order_fax01, dtb_order.order_fax02, dtb_order.order_fax03, dtb_order.order_zip01, dtb_order.order_zip02, (SELECT mtb_pref.name FROM mtb_pref WHERE mtb_pref.id = dtb_order.order_pref), dtb_order.order_addr01, dtb_order.order_addr02, dtb_order.order_sex, dtb_order.order_birth, dtb_order.order_job, dtb_order.subtotal, dtb_order.discount, dtb_order.deliv_fee, dtb_order.charge, dtb_order.use_point, dtb_order.add_point, dtb_order.tax, dtb_order.total, dtb_order.payment_total, dtb_order.deliv_id, dtb_order.payment_method, dtb_order.note, dtb_order.status, dtb_order.create_date, dtb_order.update_date, dtb_order.commit_date, dtb_order.device_type_id, (SELECT count(*) FROM dtb_shipping WHERE dtb_shipping.order_id = dtb_order.order_id), (SELECT ARRAY_TO_STRING(ARRAY(SELECT dtb_shipping.shipping_id FROM dtb_shipping WHERE dtb_shipping.order_id = dtb_order.order_id), ',')) FROM dtb_order WHERE del_flg = 0 ;
セレクトするカラムにサブクエリを使用している箇所が難しいですわね♪特に、最後のサブクエリは一捻り必要ですの!
サブクエリの結果が「複数の場合がある」ことが、難しくなる原因ですわ♪一つだけの場合は問題ありませんけれども、複数の場合は次のようなエラーとなります。
副問い合わせで1行を超える行を返すものが式として使用されました
これを避けるために、array_to_string 関数を使用しておりますの♪concat 関数は、PostgreSQL 9.1 から追加された関数です。それまではありませんでした。
EC-CUBE は PostgreSQL 8 でも動作するようにできております。よって、concat 関数を使用しないで実現する必要がある、そういうわけですわね♪
なお、サブクエリはわたくしたちがさらっと書いたように申し上げてきましたけれども、違いますの♪そんな車輪の再開発はいたしませんわ。
どこから引っ張ってきたかと申しますと、受注管理の CSV 出力を司る部分からですの♪当然ですわね♪
具体的には、dtb_csv.disp_name に「配送」が含まれている行の col を見て、それを引っ張ってきただけですわ♪
おわりに
PostgreSQL に array_to_string という関数があること、はじめて知りましたの♪勉強になりましたわ♪
また、サブクエリについては、次のページが勉強になりました。ありがとう存じます。
以上です。
「【EC-CUBE 2.12】受注管理のCSV出力をコンテンツ管理>CSV出力項目設定>高度な設定で実現します!」への1件の返信
[…] 【EC-CUBE 2.12】受注管理のCSV出力をコンテンツ管理>CSV出力項目設定>高度な設定で実現します! | oki2a24 […]