バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 商品並び替え設定のエラーについて eccube2.13.5

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mtec
投稿日時: 2017/9/19 14:03
対応状況: 解決済
常連
登録日: 2014/11/18
居住地:
投稿: 60
商品並び替え設定のエラーについて eccube2.13.5
管理画面の、
商品管理メニューより、商品並び替えを選び、

カテゴリごとに商品を並び変えるために
「内部順位再割り当て」のボタンを押すと、以下のようなエラーが出てしまいます。


▼▼▼ デバッグ情報ここから ▼▼▼
http://www.****.com/admin/products/product_rank.php?


Fatal error(E_USER_ERROR): DB処理でエラーが発生しました。
SQL: [ UPDATE dtb_product_categories SET rank = ( SELECT COUNT(*) FROM dtb_product_categories t_in WHERE t_in.category_id = dtb_product_categories.category_id AND ( t_in.rank < dtb_product_categories.rank OR ( t_in.rank = dtb_product_categories.rank AND t_in.product_id < dtb_product_categories.product_id ) ) ) + 1 WHERE dtb_product_categories.category_id = ?]
MDB2 Error: unknown error
_doQuery: [Error message: Could not execute statement]
[Last executed query: PREPARE mdb2_statement_mysql_93b20ca4e7d6ef4b9cc4165e9e59b94365a6b8c0f FROM ' UPDATE dtb_product_categories SET rank = ( SELECT COUNT(*) FROM dtb_product_categories t_in WHERE t_in.category_id = dtb_product_categories.category_id AND ( t_in.rank < dtb_product_categories.rank OR ( t_in.rank = dtb_product_categories.rank AND t_in.product_id < dtb_product_categories.product_id ) ) ) + 1 WHERE dtb_product_categories.category_id = ?']
[Native code: 1093]
[Native message: You can't specify target table 'dtb_product_categories' for update in FROM clause]
on [/virtual/*****/public_html/www.******/data/class/SC_Query.php(1095)]
/virtual/*****/public_html/www.******/admin/products/product_rank.php(29): LC_Page_Admin_Products_ProductRank_Ex->process
/virtual/*****/public_html/www.******/data/class_extends/page_extends/admin/products/LC_Page_Admin_Products_ProductRank_Ex.php(54): LC_Page_Admin_Products_ProductRank->process
/virtual/*****/public_html/www.******/data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php(57): LC_Page_Admin_Products_ProductRank->action
/virtual/*****/public_html/www.******/data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php(94): LC_Page_Admin_Products_ProductRank->lfRenumber
/virtual/*****/public_html/www.******/data/class/pages/admin/products/LC_Page_Admin_Products_ProductRank.php(165): SC_Query->query
/virtual/*****/public_html/www.******/data/class/SC_Query.php(868): SC_Query->prepare
/virtual/*****/public_html/www.******/data/class/SC_Query.php(1024): SC_Query->error
/virtual/*****/public_html/www.******/data/class/SC_Query.php(1095): trigger_error
▲▲▲ デバッグ情報ここまで ▲▲▲


商品データやカテゴリデータなどをCSVでインポートしておりますので、そのせいだとは思うのですが、
どのように修正すれば良いか、分かりましたらご教授ください。

よろしくお願いします。


[EC-CUBE] 2.13.5
[PHP] 5.6.31
[データベース] MySQL 5.7.17-log
shinra
投稿日時: 2017/9/19 15:44
対応状況: −−−
一人前
登録日: 2017/9/2
居住地:
投稿: 124
Re: 商品並び替え設定のエラーについて eccube2.13.5
原因はUPDATEするクエリ内にサブクエリとしてUPDATEするテーブルを使用できないっていう制限に引っかかった事にあります。
なのですごい雑に作った感じですが、
LC_Page_Admin_Products_ProductRankのlfRenumberを

    function lfRenumber($parent_category_id) {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $query ='
            CREATE TEMPORARY TABLE dtb_product_categories2 (
                product_id int NOT NULL,
                category_id int NOT NULL,
                rank int NOT NULL,
                PRIMARY KEY(product_id, category_id)
            );
        ';
        $objQuery->query($query);
        
        $query = '
        INSERT INTO dtb_product_categories2
        SELECT
            *
        FROM    
            dtb_product_categories
        ';
        $objQuery->query($query);
        $sql = <<< __EOS__
            UPDATE dtb_product_categories
            SET
                rank =
                    (
                        SELECT COUNT(*) as cnt
                        FROM dtb_product_categories2 t_in
                        WHERE t_in.category_id = dtb_product_categories.category_id
                            AND (
                                t_in.rank < dtb_product_categories.rank
                                OR (
                                    t_in.rank = dtb_product_categories.rank
                                    AND t_in.product_id < dtb_product_categories.product_id
                                )
                            )
                    ) + 1
            WHERE dtb_product_categories.category_id = ?
__EOS__;
        $arrRet = $objQuery->query($sql, array($parent_category_id));
        return $arrRet;
    }

このように変更することで対応ができるようになります。

多分ちゃんとクエリ書けば行ける気はするんですが、取り急ぎエラー無く通るようになります。
mtec
投稿日時: 2017/9/19 16:09
対応状況: 解決済
常連
登録日: 2014/11/18
居住地:
投稿: 60
Re: 商品並び替え設定のエラーについて eccube2.13.5
ありがとうございます。
ここまで親切にしていただき、感謝いたします。

完璧に動作しました

ほんとうにありがとうございました。

hinraさんは天才ですね。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,711名です
総投稿数は109,949件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.