バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 2.11.1系で、新着商品を表示させたい。

フロント機能

新規スレッドを追加する

| 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
vyu
投稿日時: 2011/7/4 15:45
対応状況: −−−
半人前
登録日: 2011/6/24
居住地:
投稿: 15
Re: 2.11.1系で、新着商品を表示させたい。
お返事が遅れてしまいました。申し訳ございません。

差し替えて試していましたが、
似たようなエラーが表示されます。


_doQuery: [Error message: Could not execute statement]
[Last executed query: PREPARE mdb2_statement_mysql_16d4d2784eb781c2bdb72088f5a125ec7a68f67601 FROM 'SELECT dtb_products.product_id, dtb_products.name, dtb_products.main_image, MIN(dtb_products_class.price02) AS price02_min, MAX(dtb_products_class.price02) AS price02_max FROM dtb_products INNER JOIN dtb_products_class ON dtb_products.product_id = dtb_products_class.product_id WHERE dtb_products.product_flag LIKE ? GROUP BY product_id ORDER BY dtb_products.update_date DESC ']
[Native code: 1054]
[Native message: Unknown column 'dtb_products.product_flag' in 'where clause']


/※root※/shop/user_data/newitemtest.php 56:LC_Page_User->process
/※root※/shop/user_data/newitemtest.php 31:LC_Page->sendResponse
/※root※/data/class/pages/LC_Page.php 133:SC_Display->prepare
/※root※/data/class/SC_Display.php 74:SC_View->getResponse
/※root※/data/class/SC_View.php 92:Smarty->fetch
/※root※/data/module/Smarty/libs/Smarty.class.php 1263:include
/※root※/data/Smarty/templates_c/default/%%F1^F15^F158E3F4%%site_frame.tpl.php 88:Smarty->_smarty_include
/※root※/data/module/Smarty/libs/Smarty.class.php 1869:include
/※root※/data/Smarty/templates_c/default/%%58^587^5876E692%%site_main.tpl.php 127:smarty_core_smarty_include_php
/※root※/data/module/Smarty/libs/internals/core.smarty_include_php.php 40:Smarty->_include
/※root※/data/module/Smarty/libs/Smarty.class.php 1923:include
/※root※/shop/frontparts/bloc/product_flag.php 10:LC_Page_FrontParts_Bloc_ProductFlag_Ex->process
/※root※/data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_ProductFlag_Ex.php 27:LC_Page_FrontParts_Bloc_ProductFlag->process
/※root※/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_ProductFlag.php 75:SC_Query->select
/※root※/data/class/SC_Query.php 153:SC_Query->getAll
/※root※/data/class/SC_Query.php 265:SC_Query->prepare
/※root※/data/class/SC_Query.php 867:MDB2_Driver_mysql->prepare
/※root※/data/module/MDB2/Driver/mysql.php 1123:MDB2_Driver_mysql->_doQuery
/※root※/data/module/MDB2/Driver/mysql.php 798:MDB2_Driver_Common->raiseError
/※root※/data/module/MDB2.php 1497:PEAR->raiseError
/※root※/data/module/PEAR.php 557:MDB2_Error->MDB2_Error
/※root※/data/module/MDB2.php 1009:PEAR_Error->PEAR_Error
aska824
投稿日時: 2011/7/4 17:08
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: 2.11.1系で、新着商品を表示させたい。
自分もトップページに新着商品を表示させたく、試行錯誤しています。

あまりデータベースにも詳しくないですが、自分なりに考えたのが、
エラーを見ると

[Native message: Unknown column 'dtb_products.product_flag' in 'where clause']

と表示されてします。
データベースを見ると「dtb_products」の中に「product_flag」のカラムが入って無いからじゃないかな?と思うんですが・・・。

そうすると、
$where = "dtb_products.product_flag ILIKE ?";
の辺りを変えてみたらどうなのかな?と思っています。

dtb_products_statusが関係ありそうなのですが・・・
自分の知識だとこれまでです・・・

どなたかご教授お願いします。
(もしかしたら全く違うかもしれませんが・・・^^;)

【追記】
因みに
$where = "dtb_products.product_flag ILIKE ?";

$where = "dtb_product_status.product_status_id ILIKE ?";
に変更すると
ERROR: missing FROM-clause entry for table "dtb_product_status"]
とエラーがでます。


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

fukap
投稿日時: 2011/7/4 17:14
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 2.11.1系で、新着商品を表示させたい。
前の問題はクリアできたようです。
ちゃんと前進していますよ。

今回の問題は、aska824様も仰る通り、dtb_products に product_flag が存在していないことによるエラーだと思います。

ちょっと見てみましたが、ver 2.4 までは product_flag が存在していたのですが、
ver 2.11 になり、dtb_product_status に役割が移っているみたいですね。
エラーが出るのも当然です。

この部分、プログラムの意図を理解して、ちゃんと書き換えないといけないですね。
誰か公開してくれないかな?
aska824
投稿日時: 2011/7/5 17:54
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: 2.11.1系で、新着商品を表示させたい。
間違ってるかもしれませんが、これで何か進展すればと・・・

$col,$fromを見ると、dtb_product_statusが入って無いから、もしかするとそこに入れてやれば少しは変わるんじゃないかなと思ってます・・・。

けど、今は自分なりに思考錯誤して構文を当ててあげてるんですが、どうもうまく行ってくれませんのでとりあえずで載せました。

$fromにdtb_product_statusのテーブルから引っ張ってくる構文を入れてみればうまく行きそうですが・・・
(多分$colはそのままdtb_product_status.product_status_idを追加すればいいかと・・・)

PHP文には詳しくないので違うかもしれませんが、とりあえず報告を・・・

【追記】
$col = "dtb_products.product_id, dtb_products.name, dtb_products.main_image, MIN(dtb_products_class.price02) AS price02_min, MAX(dtb_products_class.price02) AS price02_max, dtb_product_status.product_status_id";
$from = "dtb_products INNER JOIN dtb_products_class ON dtb_products.product_id = dtb_products_class.product_id";
$from .= " INNER JOIN dtb_product_status ON dtb_products.product_id = dtb_product_status.product_id";
$where = "dtb_product_status.product_status_id ILIKE ?";
と記述してみた所、
column reference "product_id" is ambiguous
と、エラーが返されました。

参考になるかな?
何か構文が違ったりしたら教えてください。


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

fukap
投稿日時: 2011/7/6 9:06
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 2.11.1系で、新着商品を表示させたい。
元ソースの $ret の意図がわからなかったのですが、
どうも以前は $product_flag が 101100 といった感じの文字列だったために、
それにあわせるために for を使ってループさせてるっぽいですね。

ver 2.11 の dtb_product_status はかなり簡潔な仕様になっているので、
もっと簡単なコードでいけないかなと考えてみました。

$col = "dtb_products.product_id, dtb_products.name, dtb_products.main_image, MIN(dtb_products_class.price02) AS price02_min, MAX(dtb_products_class.price02) AS price02_max";
$from = "dtb_products INNER JOIN dtb_products_class ON dtb_products.product_id = dtb_products_class.product_id INNER JOIN dtb_product_status ON dtb_product.product_id = dtb_product_status.product_id";
$where = "dtb_product_status.product_status_id = ?";
$groupby = "product_id";
$this->groupby=$objQuery->setGroupBy($groupby);

//商品の表示はupdate_dateが新しい順
$order = "dtb_products.update_date DESC";
$this->order=$objQuery->setOrder($order);

$arrFlagList = $objQuery->select($col, $from, $where, array($productFlag));

実際には試していないので、自信はないですが、ご参考まで。
aska824
投稿日時: 2011/7/6 19:18
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: 2.11.1系で、新着商品を表示させたい。
fukap様の作ってくれたソースで試すと

[Native message: ERROR: column reference "product_id" is ambiguous]

とでますね・・・。

2.11からは12345ってな感じでなってるんですよね。

その番号がある行だけを抽出出来れば・・・
頭でわかってるのに知識が足りないせいでソースに出せないこのもどかしさ・・・
自分ももっと勉強したほうがいいですね^^;


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

fukap
投稿日時: 2011/7/6 19:51
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 2.11.1系で、新着商品を表示させたい。
その調子でやっていれば、私程度ならすぐ超えられますよ。

私の頭の体操に付き合わせて恐縮ですが、こうすればいけたりとかしないかな。

$groupby = "dtb_products.product_id";


aska824
投稿日時: 2011/7/6 20:05
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: 2.11.1系で、新着商品を表示させたい。
いえいえ^^;
僕なんかまだまだfukap様の足元にも及びませんよ><

僕もその方法試してみたんですが、
column "dtb_product_status.product_id" must appear in the GROUP BY clause or be used in an aggregate function
とでてしまいます・・・^^;

まだまだ思考錯誤中です><


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

aska824
投稿日時: 2011/7/6 20:34
対応状況: −−−
長老
登録日: 2010/2/20
居住地: 静岡県
投稿: 185
Re: 2.11.1系で、新着商品を表示させたい。
一応、今色々と試してみたんですが、
(ちょっとめんどくさいんで、SQLから直接操作してます^^;)

SELECT dtb_products.product_id, dtb_products.name, dtb_products.main_image, dtb_product_status.product_status_id
FROM dtb_products INNER JOIN dtb_product_status ON dtb_products.product_id = dtb_product_status.product_id
WHERE dtb_product_status.product_status_id = 1
ORDER BY product_id

とすると、しっかり表示はできます。
ただ、これだと金額が表示できないんで、もしかすると、INNER JOINの部分かなぁって思ったりしてます^^;

金額(dtb_products_class)をSELECTに追加、FROMにINNER JOINで入れてやるとエラーがでちゃいます・・・。
とりあえず進行状況説明してるだけなので・・・^^;

まだまだ試行錯誤中です><

【追記】
あ、データベース直接操作だと、PHPで表示させた時エラーでちゃいますね・・・。

【さらに追記】
最後の部分、GROUPじゃなくてORDERになってますね^^;
GROUP BYなくしたらしっかりと表示されました。

ただ、PHPで表示はされません・・・
データベース直接だとテーブルがちゃんと表示してくれてるんですが・・・^^;


----------------
-----------情報-----------
自分の分かる範囲でお答えします。

Shop Mate

fukap
投稿日時: 2011/7/6 22:23
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 2.11.1系で、新着商品を表示させたい。
これでどうだろうか?(結局やる羽目に・・・)

$col = "dtb_products.product_id, dtb_products.name, dtb_products.main_image, MIN(dtb_products_class.price02) AS price02_min, MAX(dtb_products_class.price02) AS price02_max";
$from = "dtb_products INNER JOIN dtb_products_class ON dtb_products.product_id = dtb_products_class.product_id INNER JOIN dtb_product_status ON dtb_products.product_id = dtb_product_status.product_id";
$where = "dtb_product_status.product_status_id = ?";
$groupby = "dtb_products.product_id, dtb_products.name, dtb_products.main_image, dtb_product_status.product_id, dtb_products.update_date";
$this->groupby=$objQuery->setGroupBy($groupby);

//商品の表示はupdate_dateが新しい順
$order = "dtb_products.update_date DESC";
$this->order=$objQuery->setOrder($order);

$arrFlagList = $objQuery->select($col, $from, $where, array($productFlag));

一応、ブロックが表示されるところまでできました。
« 1 2 (3) 4 5 6 »
| 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,039名です
総投稿数は110,020件です

投稿数ランキング

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