質問 > 管理機能 > 受注期間を指定して検索するとシステムエラー |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
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する時に重複項目名がある際は、面倒でも「*」をむやみに使用せず、 使ったとしても以下のような記述にするべきです。 ↓
|
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('*', のような記述をしていましたら、以下のような記述で明示的に表示する項目を指定するようにお試し頂けますでしょうか?
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); } } |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |