バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 【ECCUBE2.11】ランキングの期間指定について

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
by0448
投稿日時: 2013/1/25 16:49
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
【ECCUBE2.11】ランキングの期間指定について
いつもお世話いただいております。

この度はランキングの期間を指定するカスタマイズについてお聞かせください。

現在、ランキングは今まで売れたもので集計するとうSQLになっております。
以下参照


$col = "T1.product_id, T1.product_name as name, T3.main_list_image, COUNT(*) as order_count, T1.price";
$from = "dtb_order_detail AS T1
INNER JOIN dtb_order AS T2 ON T1.order_id = T2.order_id
INNER JOIN dtb_products AS T3 ON T1.product_id = T3.product_id";
$objQuery->setwhere("T3.status = 1 AND T3.del_flg = 0" );
$objQuery->setGroupBy("T1.product_id, T1.product_name, T3.main_list_image");
$objQuery->setOrder("order_count DESC");
$objQuery->setLimit(5);




これを一週間の期間を指定しようと思ったのですが、WEHRE のみのつけたしではどうにもエラーが出てしまいます。

FROMに dtb_order をつけたして create_date を呼び出すようにしないといけないのですが、複雑すぎて手に負えなくなってしまいました。


どなたか、この問題についてご教授いただけないでしょうか。
よろしくお願いいたします。


―環境―――――――――――――
EC-CUBE 2.11.2
MySQL 5.1.34-log
PHP 5.2.17
――――――――――――――――

karin
投稿日時: 2013/1/25 18:11
対応状況: −−−
仙人
登録日: 2008/9/15
居住地: 東京都
投稿: 689
Re: 【ECCUBE2.11】ランキングの期間指定について
エラー内容はわかりますか?

$objQuery->setwhere("T3.status = 1 AND T3.del_flg = 0" );


推測ですが、上記の関数名のwが小文字になっている事もエラーの一因かもしれません。
正しくは、$objQuery->setWhere かと思います。



----------------

by0448
投稿日時: 2013/1/25 18:47
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】ランキングの期間指定について
karin 様

ご返答ありがとうございます。
確かにこの部分だけ小文字になっていましたね。


実は、記述したSQLの段階ではまだエラーは出ていません。
追加しようと思った部分は以下の通りです。



$objQuery->setWhere("T3.status = 1 AND T3.del_flg = 0" AND create_date > DATE_ADD(NOW(),INTERVAL -7 DAYS) );


これだけの追加ですと
Parse error: syntax error, unexpected T_STRING in ***/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Ranking.php on line 119

という形で出てしまいます。

自分としてはどのように組み立てて良いのかわからないもので、よろしければご教授お願いできますでしょうか。
よろしくお願いいたします。
karin
投稿日時: 2013/1/25 18:58
対応状況: −−−
仙人
登録日: 2008/9/15
居住地: 東京都
投稿: 689
Re: 【ECCUBE2.11】ランキングの期間指定について
プログラムの構文エラーのようですね。
ダブルクォーテーションの位置が原因ではないでしょうか?

正しくは、
$objQuery->setWhere("T3.status = 1 AND T3.del_flg = 0 AND create_date > DATE_ADD( NOW(),INTERVAL -7 DAYS )" );



----------------

by0448
投稿日時: 2013/1/25 19:18
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】ランキングの期間指定について
karin 様

ご返答ありがとうございます。

頂いたコードを入力しましたところ、以下のようなエラーが出ました。

[Native message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DAYS ) GROUP BY T1.product_id, T1.product_name, T3.main_list_image ORDER BY orde' at line 1]


以下の部分にfromなどに追加しないといけないのでしょうか。



// ランキング検索
function lfGetRanking(){
$objQuery = new SC_Query();

$col = "T1.product_id, T1.product_name as name, T3.main_list_image, COUNT(*) as order_count, T1.price";
$from = "dtb_order_detail AS T1
INNER JOIN dtb_order AS T2 ON T1.order_id = T2.order_id
INNER JOIN dtb_products AS T3 ON T1.product_id = T3.product_id";
$objQuery->setWhere("T3.status = 1 AND T3.del_flg = 0 AND create_date > DATE_ADD( NOW(),INTERVAL -7 DAYS )" );
$objQuery->setGroupBy("T1.product_id, T1.product_name, T3.main_list_image");
$objQuery->setOrder("order_count DESC");
$objQuery->setLimit(5);

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




何度もお手数をおかけして申し訳ございませんが、ご教授の方、よろしくお願いいたします。

karin
投稿日時: 2013/1/25 19:31
対応状況: −−−
仙人
登録日: 2008/9/15
居住地: 東京都
投稿: 689
Re: 【ECCUBE2.11】ランキングの期間指定について
-7 DAYS ではなく
正しくは、-7 DAY かと思います。(Sは不要)


恐らく、上記を修正しても、次のSQL構文エラー(下記のようなエラー)が発生するかと思います。


Column 'create_date' in where clause is ambiguous


create_date に接頭子をつける必要があります。


----------------

by0448
投稿日時: 2013/1/25 21:48
対応状況: −−−
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】ランキングの期間指定について
投稿者: karin 様

たびたびのご指摘、ありがとうございます。


思考錯誤の結果、以下で立ち止まっております。


// ランキング検索
function lfGetRanking(){
$objQuery = new SC_Query();

$col = "T1.product_id, T1.product_name as name, T3.main_list_image, COUNT(*) as order_count, T1.price, dtb_order";
$from = "dtb_order.dtb_order_detail AS T1
INNER JOIN dtb_order AS T2 ON T1.order_id = T2.order_id
INNER JOIN dtb_products AS T3 ON T1.product_id = T3.product_id";
$objQuery->setWhere("T3.status = 1 AND T3.del_flg = 0 AND dtb_order.create_date > DATE_ADD( NOW(),INTERVAL -7 DAY )" );
$objQuery->setGroupBy("T1.product_id, T1.product_name, T3.main_list_image");
$objQuery->setOrder("order_count DESC");
$objQuery->setLimit(5);

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



エラーは以下の通りです。

[Native message: SELECT command denied to user '****'@'****' for table 'dtb_order_detail']



どこがどう間違っているのかわからなくて行き詰ってしまいました。
何度も申し訳ありませんが、ご教授お願いいたします。


yuh
投稿日時: 2013/1/25 23:48
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 【ECCUBE2.11】ランキングの期間指定について
書いているクエリ文が間違っています。
$col = "T1.product_id, T1.product_name as name, T3.main_list_image, COUNT(*) as order_count, T1.price";
$from = "dtb_order_detail AS T1
INNER JOIN dtb_order AS T2 ON T1.order_id = T2.order_id
INNER JOIN dtb_products AS T3 ON T1.product_id = T3.product_id";
$objQuery->setWhere("T3.status = 1 AND T3.del_flg = 0 AND T2.create_date > DATE_ADD( NOW(),INTERVAL -7 DAY )" );
$objQuery->setGroupBy("T1.product_id");
$objQuery->setOrder("order_count DESC");
$objQuery->setLimit(5);

多分こう言うふうに書けば通るとおもいます。

速い処理を目指すなら

function lfGetRanking(){
$objQuery = new SC_Query();
$query = '
SELECT
	T1.product_id, T1.product_name as name, T3.main_list_image, COUNT(*) as order_count, T1.price
FROM
	(
		SELECT
			order_id
		FROM
			dtb_order
		WHERE
			create_date > DATE_ADD( NOW(),INTERVAL -7 DAY )
	) T2 INNER JOIN
	dtb_order_detail T1 ON(T2.order_id = T1.order_id) INNER JOIN
	dtb_products AS T3 ON T1.product_id = T3.product_id
WHERE
	T3.status = 1 AND 
	T3.del_flg = 0 
GROUP BY
	T1.product_id
ORDER BY
	order_count DESC
LIMIT 5
';

	
return $objQuery->getAll($query);
}


このように書けばいいと思います。
by0448
投稿日時: 2013/1/26 20:14
対応状況: 解決済
長老
登録日: 2011/9/12
居住地: 横浜市
投稿: 186
Re: 【ECCUBE2.11】ランキングの期間指定について
yuh 様

ご教授ありがとうございました。

$objQuery->setWhere("T3.status = 1 AND T3.del_flg = 0 AND T2.create_date > DATE_ADD( NOW(),INTERVAL -7 DAY )" );


T2 というものを付け足すだけでよかったのですね。
見当違いの考え方だったようで、目からうろこでした。


追加で早い処理のコードまで頂いて、本当にありがとうございます。
今後はこちらを利用させて頂きます。

ご助力、感謝いたします。



karin 様

何度もお付き合いいただき、ありがとうございました。
おかげで解決いたしました。
感謝いたします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
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.