バージョン選択

フォーラム

メニュー

オンライン状況

58 人のユーザが現在オンラインです。 (44 人のユーザが フォーラム を参照しています。)
登録ユーザ: 3
ゲスト: 55
kggh tattsu h_tanaka もっと...

サイト内検索

その他 > その他 > テストデータ生成スクリプトについて

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ramrun
投稿日時: 2008/2/12 13:05
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
テストデータ生成スクリプトについて
テストデータ生成スクリプト
EC-CUBE 2用のテストデータ生成スクリプトですが、いくつかハマるところがあったのでパッチを作りました。

試す人はまず、
1.EC-CUBE 2.0.1をセットアップする
2.既存のカテゴリ、商品(なべとかアイス)を消す
 delete from dtb_category;
 delete from dtb_category_count;
 delete from dtb_category_total_count;
 delete from dtb_product_categories;
 delete from dtb_products;
 delete from dtb_products_class;
3.テストスクリプトのDB接続情報を変更して実行する
 このときはまだフロントに商品が表示されない
4.EC-CUBEの管理画面より、商品のどれかひとつを呼び出し、なにもいじらず再登録する
 このときdtb_category_countとdtb_category_total_countが再構築され、フロントに商品が表示されるようになる

このあたりはcsvをつかって登録したときも参考になると思います。

*** CreateEcCubeData.php	2008-02-12 11:57:29.000000000 +0900
--- CreateEcCubeData2.php	2008-02-12 12:17:10.000000000 +0900
***************
*** 142,148 ****
  
          print("カテゴリを生成しています...\n");
  
!         $count = 0;
  
          // 全カテゴリ共通の値
          $sqlval['creator_id'] = 2;
--- 142,150 ----
  
          print("カテゴリを生成しています...\n");
  
!         $count = TOP_CATEGORIES_VOLUME 
!                + TOP_CATEGORIES_VOLUME * MIDDLE_CATEGORIES_VOLUME 
!                + TOP_CATEGORIES_VOLUME * MIDDLE_CATEGORIES_VOLUME * SMALL_CATEGORIES_VOLUME;
  
          // 全カテゴリ共通の値
          $sqlval['creator_id'] = 2;
***************
*** 161,167 ****
              $category_id1 = $this->objQuery->currval("dtb_category",
                                                       "category_id");
              $this->arrCategory1[] = $category_id1;
!             $count++;
              print(".");
  
              // 中カテゴリを生成
--- 163,169 ----
              $category_id1 = $this->objQuery->currval("dtb_category",
                                                       "category_id");
              $this->arrCategory1[] = $category_id1;
!             $count--;
              print(".");
  
              // 中カテゴリを生成
***************
*** 176,182 ****
                  $category_id2 = $this->objQuery->currval("dtb_category",
                                                           "category_id");
                  $this->arrCategory2[] = $category_id2;
!                 $count++;
                  print(".");
  
                  // 小カテゴリを生成
--- 178,184 ----
                  $category_id2 = $this->objQuery->currval("dtb_category",
                                                           "category_id");
                  $this->arrCategory2[] = $category_id2;
!                 $count--;
                  print(".");
  
                  // 小カテゴリを生成
***************
*** 192,198 ****
                      $category_id3 = $this->objQuery->currval("dtb_category",
                                                               "category_id");
                      $this->arrCategory3[] = $category_id3;
!                     $count++;
                      print(".");
                  }
              }
--- 194,200 ----
                      $category_id3 = $this->objQuery->currval("dtb_category",
                                                               "category_id");
                      $this->arrCategory3[] = $category_id3;
!                     $count--;
                      print(".");
                  }
              }
***************
*** 255,260 ****
--- 257,263 ----
          print("商品を生成しています...\n");
          for ($i = 0; $i < PRODUCTS_VOLUME; $i++) {
              $sqlval['name'] = sprintf("商品%d", $i);
+             $sqlval['sale_unlimited'] = 1;
              $sqlval['status'] = 1;
              $sqlval['product_flag'] = "10010";
              $sqlval['point_rate'] = 1;
***************
*** 401,411 ****
       */
      function createProductsCategories($arrCategory_id, $category_name) {
  
-         $count = 0;
          printf("%s の商品カテゴリを生成しています...\n", $category_name);
          foreach ($arrCategory_id as $category_id) {
              $sqlval['category_id'] = $category_id;
  
              foreach($this->arrProduct_id as $product_id) {
                  $sqlval['product_id'] = $product_id;
                  $sqlval['rank'] = $count;
--- 404,414 ----
       */
      function createProductsCategories($arrCategory_id, $category_name) {
  
          printf("%s の商品カテゴリを生成しています...\n", $category_name);
          foreach ($arrCategory_id as $category_id) {
              $sqlval['category_id'] = $category_id;
  
+             $count = 1;
              foreach($this->arrProduct_id as $product_id) {
                  $sqlval['product_id'] = $product_id;
                  $sqlval['rank'] = $count;
***************
*** 1122,1127 ****
--- 1125,1133 ----
                      return;
                  }
              }
+             if(DB::isError($objDbConn)) {
+                 die($objDbConn->getMessage());
+             }
          }
  
          $this->conn = $objDbConn;


nanasess
投稿日時: 2008/2/14 10:56
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: テストデータ生成スクリプトについて
ramrun さん,

大河内です. ご指摘ありがとうございます.
反応が遅れて申し訳ないです...

引用:

4.EC-CUBEの管理画面より、商品のどれかひとつを呼び出し、なにもいじらず再登録する
 このときdtb_category_countとdtb_category_total_countが再構築され、フロントに商品が表示されるようになる


TracWiki にこの説明が抜けていましたね...
自分では書いたつもりになっていました(汗)
大変恐縮です...

また, パッチのご提供ありがとうございます!
一瞬の隙で書いたスクリプトだったので, 十分にテストできなかったことは否めません...
また, あいにく, しばらくの間は動作環境がありません...
パッチの動作確認後, TracWiki に反映させて頂きます.

ありがとうございました!
hoge
投稿日時: 2008/6/16 2:04
対応状況: −−−
新米
登録日: 2008/6/4
居住地:
投稿: 10
Re: テストデータ生成スクリプトについて
お世話さまです。

大変興味深く拝見させていただきました。
テストデータ生成となっていますが
sqlへのデーターの一括インポートに
活用はできないでしょうか?

csvでの一括入力は制限がかかり1500点ほどが
maxのようです。

行いたいことはcsv入力ではなく
phpMyAdminで該当するテーブルにインポートしたいのですが
可能でしょうか?

ピントでもいただけると幸いです。
よろしくお願いいたします。


seasoft
投稿日時: 2008/6/16 3:30
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: テストデータ生成スクリプトについて
テーブル定義に従ったデータを流せば、DB直入れは可能だと思います。
その際に、どのテーブルやカラムを対象とするかの特定には、このスクリプトは役立ちそうです。

しかしそれ以上に役立つのは、テーブル定義書だと思います。
http://wiki.ec-cube.net/index.php?%B6%A6%C4%CC%2F3_%A5%AB%A5%B9%A5%BF%A5%DE%A5%A4%A5%BA%2F03_%A5%C7%A1%BC%A5%BF%A5%D9%A1%BC%A5%B9%B9%BD%C0%AE


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

nanasess
投稿日時: 2008/6/16 9:16
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: テストデータ生成スクリプトについて
hoge 様

1. インポートするデータをどこに持つか
2. 商品データと規格, カテゴリなどのマッピングをどう処理するか

というような問題をうまく解決できれば, データの一括登録などにも使えると思います.

phpMyAdmin については使ったことがないので, このスクリプトを活用できるかはわからないです.
すみません.

seasoft 様

本当は, Jude などで, 論理モデルと物理モデルや, リレーションシップなどを明確にした ER図を作りたいんですけどね...
なかなか本業が落ちつかず...(苦笑)
hoge
投稿日時: 2008/6/16 10:15
対応状況: −−−
新米
登録日: 2008/6/4
居住地:
投稿: 10
Re: テストデータ生成スクリプトについて
ありがとうございます。

dtb_category_count
dtb_category_total_count
dtb_product_categories
dtb_products
dtb_products_class

のうち
dtb_product_categories
dtb_products
はcsvとほぼ同じの生データとして扱えます。

dtb_products_class
はほんのちょっとひとひねりしたらできます。

問題は
dtb_category_count
dtb_category_total_count
です。
countするのが面倒です。
なぜcountがあるのか
私にはわからない。

ここで現在は中座しています。

phpMyAdminではLimitを上げれば
数十mbのデーターをインポートできるので
便利ですよ。
(取り込みが終わる前にtimuoutされる危険はありますが。)

勉強勉強・・・。


seasoft
投稿日時: 2008/6/16 12:46
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7367
Re: テストデータ生成スクリプトについて
引用:

問題は
dtb_category_count
dtb_category_total_count
です。
countするのが面倒です。
なぜcountがあるのか
私にはわからない。

商品カテゴリーの括弧内に表示される、件数の表示用ですかね。
表示するときに毎回数えると負荷が高くなるのの回避策かな?

これと同じように、集計済みの情報を色々と持たせれば、表示時の速度は速くなります。しかし、手動でテーブルを変更するときなどが面倒になるのですよね… 私のように50点以内の商品を扱うくらいなら、表示時にリアルタイムに集計したって平気なんですけどね。この辺の両立って難しいですね。

現状の EC-CUBE の実装状態としては、
・50点程度の商品を扱うにしては、無駄な集計を事前に行っている。
・1000点程度の商品を扱うにしては、事前に行う集計が不足している。
といった感じかも。

ちなみに、上でも書かれているように
引用:

4.EC-CUBEの管理画面より、商品のどれかひとつを呼び出し、なにもいじらず再登録する
 このときdtb_category_countとdtb_category_total_countが再構築され、フロントに商品が表示されるようになる

をすれば当該テーブルは自動集計されると思います。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

nanasess
投稿日時: 2008/6/18 0:49
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: テストデータ生成スクリプトについて
ちょっとだけ反応します...

引用:

問題は
dtb_category_count
dtb_category_total_count
です。
countするのが面倒です。
なぜcountがあるのか
私にはわからない。


seasoft 様のおっしゃる通り, 負荷対策ですね.
毎回, カテゴリ内の商品数をカウントするのは, ちょっとナンセンスですから...

しかし, あまり美しくない実装なので, 2.x から導入された MasterData クラスなどを使ってキャッシュするようにしたら良いよなぁと, 以前から思っているのですが, 全く手がつけられず...

引用:

phpMyAdminではLimitを上げれば
数十mbのデーターをインポートできるので
便利ですよ。
(取り込みが終わる前にtimuoutされる危険はありますが。)


MySQL に疎くて恐縮です...
あまり GUI のツールを使ったことないもので。。。
PostgreSQL なら psql コマンドなど, Oracle なら sqloaderで数十GBの CSV ファイルも扱っちゃってます :)
forthety
投稿日時: 2010/2/9 16:03
対応状況: −−−
半人前
登録日: 2010/1/19
居住地:
投稿: 14
Re: テストデータ生成スクリプトについて
そもそもの質問で大変恐縮なのですが、
テストデータ生成スクリプトをどのように実行すれば
よいかお教え願えないでしょうか?
当方の環境と致しましては、
DドライブにXampp1.7.1をインストールして使用しております。
スクリプト1行目のパスの設定や、
スクリプトの実行の方法など
お教えいただけると助かります。
何卒よろしくお願い申し上げます。
AMUAMU
投稿日時: 2010/2/9 16:24
対応状況: −−−
登録日: 2009/5/2
居住地: 東京都
投稿: 2712
Re: テストデータ生成スクリプトについて
まず、参照先にも書いてあるように2.0.x用スクリプトですので、現行の2.4.x系は確か少しプログラム自体を直さないと正常に動作しなかったと思います。

パスの設定、実行方法はPHPのCLI(コマンドライン)実行については、PHP自体の使い方レベルですので、PHPのマニュアルやPHP系の本・ネットの情報を参照されると良いと思います。Windows環境で動作させるのであればWindows用の実行方法となります。


----------------
EC-CUBE公式エヴァンジェリスト
EC-CUBEインテグレートパートナー (株)スピリット・オブ
移転・拡張・高速化・問題解決
各種カスタマイズ・支援依頼承ります。

[url=h

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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