[Tep-j-general] Re: 「この商品を買った人は、こんな商品も買っています」で表示させたくない商品があります

Back to archive index

hamada bungu****@leo*****
2005年 12月 15日 (木) 09:52:27 JST


こんにちわ。

On Wed, 14 Dec 2005 19:51:32 +0900
karu <karu****@ipc-t*****> wrote:

> 失礼しました。他の商品は90000以下です。

ごめんなさい。これ当方の書き間違いなんですけど、たぶん「90000未満」が正
しいと思われます(^_^;)

> を書き換えてしまえば良いのでしょうか?

はい、そうです。で、

> 大変お恥ずかしいのですが、どこに書けばよいかわかりませんでした。

は、(既述のとおり)「その上」です。

> 大変お手数で申し訳ないのですが、どの部分をどのように書き換えればよいのか、
> お教えいただけないでしょうか?

データベースアプリケーションにはセオリーがありまして、

・データの取り出しはDBに任せる
・「データがある間」ループする

大体↑こんな風に書きます。

> $result = tep_db_query("投げるSQL");
> 
> while ($data = tep_db_fetch_array($result)) {
> 
> 	処理する内容
> 
> }

osC風に書くと↑こんな感じ。データの条件判定とかは全部DBに任せちゃって、
プログラム側は

「$dataがfalseにならない限り」
(DBから返す行がなくなるとFALSEを返してきます)

という単純な条件でループするだけ。

この辺は、当方がいちいち説明するよりも、適当なPHP+MySQLの解説本を1冊読
んで頂く方が早いと思いますが。

http://jp2.php.net/manual/ja/function.mysql-fetch-array.php

ということで、先の当方の投稿では上記の「投げるSQL」を$sqlという変数にし
て分離し、

「SQL中のデータ取り出し条件記述を状況に応じて変える」

ことで目的に沿おうとしてました。

> あと、さらに、わたしの説明不足で申し訳ないのですが、「products_model」が
> 90000〜99999番となりますので、「products_model」で処理したいのですが、ど
> のように書けばよろしいでしょうか?

「 and p.products_model not like '9%'」とかでいけませんかね? この手は、
下位品番が「00009」という書き方じゃないと使えませんが。

(products_modelにはインデックス張っとく事を強く推奨)

> これでは駄目でしょうか。

考え方としては「駄目ではない」です。なんらかの目的(大体はDBの負荷軽減)
でそういう書き方をする場合もあります。

ただ、「DBを使うアプリケーションのセオリー」からは外れてますし、文法も違っ
てます。また現在のプログラム構造から外れますんで、例外処理等、あちこちに
手当てが要りそう。

> $HTTP_GET_VARS['products_model']
> に入る予定でした、、(^^;

products_modelは引数に使われてないので、GET変数では(当然)取得出来ない
と思います。products_idから自分で引くしかないかと。

> $product_info_query = tep_db_query("select products_model from " . TABLE_PRODUCTS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
> $product_info = tep_db_fetch_array($product_info_query);
> $products_model = $product_info['products_model'];

↑何処からパクって来たか、モロバレ(^_^;)

で、取得した$products_modelの0文字目が「9」かどうか

> if ($products_model{0} == '9') {

とかで判定し、DBに投げるSQLの抽出条件を変えれば宜しいかと。


はまだ




Tep-j-general メーリングリストの案内
Back to archive index