バージョン選択

フォーラム

メニュー

オンライン状況

31 人のユーザが現在オンラインです。 (22 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 31
もっと...

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > フロント機能 > 注文履歴一覧に商品名を表示すると商品数=注文件数になる

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
himajin
投稿日時: 2017/5/16 17:17
対応状況: 解決済
新米
登録日: 2017/5/16
居住地:
投稿: 4
注文履歴一覧に商品名を表示すると商品数=注文件数になる
▼テンプレート
[EC-CUBE]2.13
[レンタルサーバ]GMO iclusta
[OS] win10
[PHP] 5.6
[データベース] Mysql
[ブラウザ]firefox
[導入プラグインの有無]なし
[カスタマイズの有無] あり

いつもお世話になっております。
ECCUBE初心者です。

MYページの注文履歴一覧のお届け先を商品名に変更しましたが、
1つの受注で2つ以上の商品の購入がある時に商品ひとつひとつが表示され、
注文履歴も商品数分になってしまいました。
例えば、購入件数自体は1なのに、商品数が2つあると、
「2件の購入履歴があります。」と表示されてしまいます。
金額も注文の合計金額が商品の件数分表示されます。

注文(order_id)別でまとめて表示させたいですが、何か良い方法はないでしょうか。
ご教授いただければ幸いです。
468
投稿日時: 2017/5/17 8:32
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 615
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
function lfGetOrderHistory()の中で処理されているSQLに
dtb_order_detailテーブルをJOINで追加されたのでしょうか?

JOINした場合、SQLの結果行数がdtb_order_detailの件数になってしまい、
合計金額や件数など修正が必要な箇所が多いと思いますので、
JOINするよりは、
dtb_orderのSELECTした結果をループさせて、
ループ内でdtb_order_detailの内容を取得するSQLを発行したほうが既存部分は変更する必要が無く、
受注明細部分を追記するだけとなりますので、実装が楽ではないかと思います。
(DB接続が複数発生するので、あまり効率の良い方法ではありませんが)

LC_Page_Mypage.php function action()内
$array = $this->arrOrder;
foreach ($array as $k => $v) {
    $array[$k]['detail'] = **ここでdtb_order_detailの結果を取得する処理**(引数に$v['order_id']);
}
$this->arrOrder = $array;


index.tpl 購入履歴のループ内
<!--{section name=cnt loop=$arrOrder}-->

    <!--{section name=cnt2 loop=$arrOrder[cnt].detail}-->
        //ここで受注詳細情報を表示
    <!--{/section}-->

<!--{/section}-->


コードはあくまでイメージですので、実際はもっと記述が増えると思いますが・・・。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

yuh
投稿日時: 2017/5/17 12:18
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1366
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
その場合はdtb_order_detailをGROUP CONCAT で商品名:数量(改行)でまとめて1つの項目として取得すると楽に表示させることができますよ。


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

himajin
投稿日時: 2017/5/17 15:29
対応状況: −−−
新米
登録日: 2017/5/16
居住地:
投稿: 4
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
ありがとうございます!

GROUP CONCATをネットで調べ、以下のテストをしてみた結果、間違いなくこれで大丈夫だと思います。

ただし、これをページで実行させる方法がわかりません…
どうか助けてください。

SELECT od.order_id, GROUP_CONCAT(de.product_name) as p_name 
FROM  dtb_order od, dtb_order_detail de 
WHERE od.order_id = de.order_id  
GROUP BY od.order_id
468
投稿日時: 2017/5/17 22:31
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 615
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
/data/class/pages/mypage/LC_Page_Mypage.php 118行目付近の
function lfGetOrderHistory()にSQLを実行する記述がありますので、
これを変更すれば良いのではないでしょうか?
ただ、ここの記述にgroup byをセットする記述が無いので、
$objQuery->setOrder($order);
の次の行あたりに
$objQuery->setGroupBy('od.order_id');
を追記する必要があると思います。

>yuhさん
GROUP_CONCAT()は初めて知りました。
便利な関数があるのですね。
いつも2つSQLを書いていたので勉強になりました。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
■360°画像ビューワーimg360
■ECCUBE技術資料blog

yuh
投稿日時: 2017/5/23 0:52
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1366
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる

lfGetOrderHistoryの

return $objQuery->select($col, $from, $where, $arrWhereVal);

の変わりに

$query = ' 
SELECT 
  order_id, 
  create_date, 
  payment_id,
  payment_total, 
  status, 
  ( 
    SELECT 
        GROUP_CONCAT(product_name separator "\n" ) 
    FROM 
        dtb_order_detail 
    WHERE 
        order_id = dtb_order.order_id 
  ) as product_name 
FROM 
  dtb_order 
WHERE 
  del_flg = 0 AND 
  customer_id = ? 
ORDER BY 
  order_id DESC'; 
return $objQuery->getAll($query,array($customer_id,SEARCH_PMAX, $startno));

こんな感じで書けばいけるんじゃないですか?
テストしてないんで動作はわかりませんが。
その処理の先にCOUNTしてる部分とかあるんで、その下に別にクエリを書いて処理を追加する感じです。
COUNT部分もSQL_CALC_FOUND_ROWS使って置き換えたい所ですが。


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

himajin
投稿日時: 2017/6/1 17:29
対応状況: −−−
新米
登録日: 2017/5/16
居住地:
投稿: 4
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
ありがとうございます!
心より感謝いたします。

色んな方法でやってみましたが、「システムエラーが発生しました。」です…
デフォルトに戻してテストしても動きません…

 

 public function lfGetOrderHistory($customer_id, $startno = -1)
    {
        $objQuery   = SC_Query_Ex::getSingletonInstance();

        $col        = 'order_id, create_date, payment_id, payment_total, status';
        $from       = 'dtb_order';
        $where      = 'del_flg = 0 AND customer_id = ?';
        $arrWhereVal = array($customer_id);
        $order      = 'order_id DESC';

        if ($startno == -1) {
            return $objQuery->count($from, $where, $arrWhereVal);
        }

        $objQuery->setLimitOffset(SEARCH_PMAX, $startno);
        // 表示順序
        $objQuery->setOrder($order);

        //購入履歴の取得
        $query = ' 
		SELECT 
		    order_id, 
		    create_date, 
		    payment_id,
			payment_total, 
		status, 
		( 
		    SELECT
    			GROUP_CONCAT(product_name separator "\n" ) 
			FROM 
                dtb_order_detail 
			WHERE 
			    order_id = dtb_order.order_id 
		) as product_name 
		FROM 
    		dtb_order 
		WHERE 
    		del_flg = 0 AND 
			customer_id = ? 
		ORDER BY 
	    	order_id DESC'; 
return $objQuery->getAll($query,array($customer_id,SEARCH_PMAX, $startno));
    }


申し訳ありませんが、どうかご指導お願いします。
yuh
投稿日時: 2017/6/2 12:45
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1366
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる

$query = ' 
SELECT 
  order_id, 
  create_date, 
  payment_id,
  payment_total, 
  status, 
  ( 
    SELECT 
        GROUP_CONCAT(product_name separator "\n" ) 
    FROM 
        dtb_order_detail 
    WHERE 
        order_id = dtb_order.order_id 
  ) as product_name 
FROM 
  dtb_order 
WHERE 
  del_flg = 0 AND 
  customer_id = ? 
ORDER BY 
  order_id DESC
LIMIT ? OFFSET ?
'; 
return $objQuery->getAll($query,array($customer_id,SEARCH_PMAX, $startno));


LIMIT とOFFSETが抜けてました^^;


----------------
ec-cube2系の速度UPしてみました。(商品数:100万件)
http://speedtest2.ec-lab.net/products/list.php?category_id=15
ec-cube2系最速!(自称)

himajin
投稿日時: 2017/6/5 11:45
対応状況: 解決済
新米
登録日: 2017/5/16
居住地:
投稿: 4
Re: 注文履歴一覧に商品名を表示すると商品数=注文件数になる
お見事です!!!

GROUP_CONCAT(product_name separator "\n" ) をそのまま入れるとエラーが発生し、separator "\n"を外すと”、”で分離され、グループ化されました。

ありがとうございます!!!!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 



ログイン


EC-CUBEペイメント

クレジットカード情報の非保持化対応

統計情報

総メンバー数は19,623名です
総投稿数は82,108件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1632
4
yuh
1366
5
red
1059
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
782
10
umebius
671
11
tao_s
646
12 sumida 638
13
homan
633
14
468
615
15 karin 609
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.