バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 受注期間を指定して検索するとシステムエラー

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
metan
投稿日時: 2014/10/25 13:48
対応状況: −−−
一人前
登録日: 2013/3/4
居住地:
投稿: 112
受注期間を指定して検索するとシステムエラー
お世話になります。

管理画面にて受注期間を指定して検索をするとシステムエラーが発生してしまいます。

以前に、下記のページのカスマイズを致しました。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=13791&forum=11

どなたかご教授頂けませんでしょうか?

EC-CUBEバージョン 2.12.2
PHPバージョン PHP 5.3.3
DBバージョン MySQL 5.0.95

エラーログは下記になります。

Fatal error(E_USER_ERROR): DB処理でエラーが発生しました。
SQL: [SELECT * FROM dtb_order, ( SELECT MIN(shipping_id) AS shipping_id, order_id FROM dtb_shipping WHERE del_flg = 0 GROUP BY order_id ) T2 LEFT JOIN dtb_shipping ON T2.shipping_id = dtb_shipping.shipping_id AND T2.order_id = dtb_shipping.order_id WHERE dtb_order.del_flg = 0 AND create_date >= ? AND create_date <= ? AND dtb_order.order_id = T2.order_id ORDER BY dtb_order.update_date DESC ]
MDB2 Error: unknown error
_doQuery: [Error message: Could not execute statement]
[Last executed query: PREPARE mdb2_statement_mysql_23ae3a83ef7b9500ee60e6812f991d94700d44e468 FROM 'SELECT * FROM dtb_order, ( SELECT MIN(shipping_id) AS shipping_id, order_id FROM dtb_shipping WHERE del_flg = 0 GROUP BY order_id ) T2 LEFT JOIN dtb_shipping ON T2.shipping_id = dtb_shipping.shipping_id AND T2.order_id = dtb_shipping.order_id WHERE dtb_order.del_flg = 0 AND create_date >= ? AND create_date <= ? AND dtb_order.order_id = T2.order_id ORDER BY dtb_order.update_date DESC LIMIT 0, 10']
[Native code: 1052]
[Native message: Column 'create_date' in where clause is ambiguous]
on [/●●/●●/●●/public_html/data/class/SC_Query.php(1008)] from
login_id = ●●(0)[avaoo7cjag573koavp7p7i5k35]
/●●/●●/●●/public_html/admin/order/index.php(34): LC_Page_Admin_Order_Ex->process
/●●/●●/●●/public_html/data/class_extends/page_extends/admin/order/LC_Page_Admin_Order_Ex.php(56): LC_Page_Admin_Order->process
/●●/●●/●●/public_html/data/class/pages/admin/order/LC_Page_Admin_Order.php(84): LC_Page_Admin_Order->action
/●●/●●/●●/public_html/data/class/pages/admin/order/LC_Page_Admin_Order.php(161): LC_Page_Admin_Order->findOrders
/●●/●●/●●/public_html/data/class/pages/admin/order/LC_Page_Admin_Order.php(472): SC_Query->select
/●●/●●/●●/public_html/data/class/SC_Query.php(167): SC_Query->getAll
/●●/●●/●●/public_html/data/class/SC_Query.php(279): SC_Query->prepare
/●●/●●/●●/public_html/data/class/SC_Query.php(949): SC_Query->error
/●●/●●/●●/public_html/data/class/SC_Query.php(1008): trigger_error

ec9iii
投稿日時: 2014/10/26 3:38
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 受注期間を指定して検索するとシステムエラー
AND create_date >= ?
AND create_date <= ?

の部分が、
dtb_orderのcreate_dateなのか、
dtb_shippingのcreate_dateなのか、
明示的に指定してください。

といったエラー内容だと思います。


AND dtb_order.create_date >= ?
AND dtb_order.create_date <= ?

にしてみるとどうでしょうか?


また、「SELECT *」の部分も、SQLはおそらく通ってしまいますが、
正しくは以下でないと、本当はダメです。
 ↓
dtb_order.*, dtb_shipping.*


この状態でも、上記の問題と同じように、
取得された結果は「create_date」が重複しておりますので、
画面に表示される値が
dtb_orderのcreate_dateが表示されるのか、
dtb_shippingのcreate_dateが表示されるのか、
があやふやなため、バグの元になります。


ですので、JOINする時に重複項目名がある際は、面倒でも「*」をむやみに使用せず、
使ったとしても以下のような記述にするべきです。
 ↓

SELECT
     dtb_order.*
    ,dtb_shipping.create_date AS shipping_create_date
FROM
    〜割愛〜
WHERE
    dtb_order.create_date >= ?
AND dtb_order.create_date <= ?




metan
投稿日時: 2014/10/27 10:42
対応状況: −−−
一人前
登録日: 2013/3/4
居住地:
投稿: 112
Re: 受注期間を指定して検索するとシステムエラー
ec9iii様

ご返信頂きまして誠にありがとうございます。早速行いたいと思います。

編集するファイルは、

LC_Page_Admin_Order.php

でよろしいでしょうか?

度々、すいません。よろしくお願いいたします。
metan
投稿日時: 2014/10/27 15:19
対応状況: −−−
一人前
登録日: 2013/3/4
居住地:
投稿: 112
Re: 受注期間を指定して検索するとシステムエラー
ec9iii様

無事に期間指定をしても表示されるようになりました。

ご教授頂きまして、誠にありがとうございました。

しかし、一つおかしな箇所がございまして、受注データを更新すると、受注一覧画面の一番左の「受注日」の日付が更新した日時に変更されてしまいます。

こちらはどのように修正すれば直りますでしょうか?

御手数お掛けしますが、宜しくお願い致します。

ec9iii
投稿日時: 2014/11/2 22:01
対応状況: −−−
一人前
登録日: 2014/9/8
居住地:
投稿: 117
Re: 受注期間を指定して検索するとシステムエラー
すみません、月末多忙で返信が遅くなりました。

修正されたのはWHEREの箇所のみでしょうか?
SELECTの部分は修正されましたか?

おそらく、内部的には取得結果が配列に格納される際に、
1.dtb_orderのcreate_dateが変数にセットされる。
2.dtb_shippingのcreate_dateで変数のcreate_dateが上書きされる。
 ↓
画面に表示される時に、変数のcreate_date は dtb_shippingのcreate_dateになってしまっている。

といった現象ではないかと予想しております。


SELECTの部分で、
$objQuery->select('*',
のような記述をしていましたら、以下のような記述で明示的に表示する項目を指定するようにお試し頂けますでしょうか?


        $col = <<< __EOS__
                 dtb_order.*
                ,dtb_shipping.画面表示に必要な項目
                ,dtb_shipping.画面表示に必要な項目
__EOS__;
        return $objQuery->select($col, 〜



dtb_shipping.画面表示に必要な項目
の項目名が、dtb_orderと重複しているの項目名がありましたら、

dtb_shipping.画面表示に必要な項目 AS 別名
のように別名をつけてください。
metan
投稿日時: 2014/11/3 9:43
対応状況: −−−
一人前
登録日: 2013/3/4
居住地:
投稿: 112
Re: 受注期間を指定して検索するとシステムエラー
ec9iii様

お忙しいところご返信頂きまして誠にありがとうございます。

$objQuery->select('*',

の記述ですが、下記に1ヶ所ございました。しかしここからどうしていいのか分からない状態でございます。

どのように記述すればよろしいでしょうか?

御手数をお掛けして誠に申し訳ございませんが、よろしくお願いいたします。

/**
* 受注を検索する.
*
* @param string $where 検索条件の WHERE 句
* @param array $arrValues 検索条件のパラメーター
* @param integer $limit 表示件数
* @param integer $offset 開始件数
* @param string $order 検索結果の並び順
* @return array 受注の検索結果
*/
function findOrders($where, $arrValues, $limit, $offset, $order) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
$table = <<<EOSQL
dtb_order, (
SELECT MIN(shipping_id) AS shipping_id, order_id
FROM dtb_shipping
WHERE del_flg = 0
GROUP BY order_id
) T2
LEFT JOIN dtb_shipping
ON T2.shipping_id = dtb_shipping.shipping_id
AND T2.order_id = dtb_shipping.order_id
EOSQL;

$where .= ' AND dtb_order.order_id = T2.order_id';
$objQuery->setLimitOffset($limit, $offset);
$objQuery->setOrder($order);
return $objQuery->select('*', $table, $where, $arrValues);
}
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.