ec-cubeのphp内の記述

このQ&Aのポイント
  • ec-cubeコミュニティーサイトで質問をしながら、現在サイトを構築中です。しかし、スレ立てしてなかなか返信がなかったので、こちらでお伺いさせて頂ければと思いました。
  • この質問は、ec-cubeのphpファイル内での記述に関するものです。具体的には、新しいparent_class_combination_id2を追加する方法について知りたいという内容です。
  • 現在のコードには、T2以下のコードをコピーし、parent_class_combination_idを~~id2に変更することで、新しいparent_class_combination_id2を追加することができます。
回答を見る
  • ベストアンサー

ec-cubeのphp内の記述

初めて投函させて頂きます。 PHPに詳しい方、ぜひ教えてください。 私はec-cubeコミュニティーサイトで質問をしながら、現在サイトを構築中です。しかし、スレ立てしてなかなか返信がなかったので、こちらでお伺いさせて頂ければと思いました。 $col = <<< __EOS__ T1.product_id, T1.stock, T1.stock_unlimited, T1.sale_limit, T1.price01, T1.price02, T1.point_rate, T1.product_code, T1.product_class_id, T1.del_flg, T1.product_type_id, T1.down_filename, T1.down_realfilename, T2.class_combination_id, T2.parent_class_combination_id, T2.classcategory_id, T2.level, T3.name AS classcategory_name, T3.rank, T4.name AS class_name, T4.class_id __EOS__; $table = <<< __EOS__ dtb_products_class T1 LEFT JOIN dtb_class_combination T2 ON T1.class_combination_id = T2.class_combination_id LEFT JOIN dtb_classcategory T3 ON T2.classcategory_id = T3.classcategory_id LEFT JOIN dtb_class T4 ON T3.class_id = T4.class_id __EOS__; こういうsql文があり、例えば新しいparent_class_combination_id2というものを追加したい場合、どのように記述を変えたらいいのでしょうか。 自分なりに考えてみましたが、T2以下をそっくりコピーし、parent_class_combination_idを、~~id2に変更すればいいのでしょうか。 また、なにか必要なものがありましたら言って頂ければ準備致します。 どうかよろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • goo036
  • ベストアンサー率75% (3/4)
回答No.1

データーベースにparent_class_combination_id2というカラム(項目)は追加済みなのでしょうか? 項目を追加する場合は、 1)データベース(mysql,postgresql)に項目を追加 2)プログラム処理(php)に項目を追加 3)画面テンプレート(tpl) という順序を踏む必要がございます。 1)まず、何がしたいのか。 2)どのような作業をしたのか。 3)何ができないのか。 を明確に記載すれば、フォーラムでも回答が得られるのではないでしょうか?

teckiko
質問者

お礼

別の方法も用いて、似たような機能を作成することにしました。どうもありがとうございました。

teckiko
質問者

補足

お返事ありがとうございます。 当方はお客様よりオーダーメイドの形式でご注文を承っております。その際に規格を利用させていただいているのですが、現状2つの規格ですと当方の形式全てを網羅することは不可能でして、せめて3つに増やせないかと考案中なのです。 現状は商品カテゴリーの子、孫を増やすことで対応しておりますが、可能であれば規格としてまとめたいと思っております。 すでにmysqlに新しいカラムは作成しており、ec-cubeの話になりますが、管理画面より規格の登録は行えております。(データベース上にも正しく登録できているので) しかし、一度規格を登録したはずの商品を確認すると、登録したはずの規格が全て外れてしまい、フロント画面にも在庫なしと出てしまいました。 そこで関連するであろうphpを調査していき、また過去の関連する質問と照らし合わせながら、最終的に上記のsql文の修正が必要とたどり着きました。 上記sql文に、T2.parent_class_combination_id2など登録してみましたが、何もおきませんでした。 また、T2の部分をそっくりそのままコピペしたりもしましたが、やはり同様なにもおきませんでした。

関連するQ&A

  • PHPとSQLをコンパクトにまとめたいです

    部分一致検索して商品が見つかった場合はその商品だけを表示して、もし検索して見つからなかったときはエラーメッセージと商品一覧を表示しています。動作上は問題ありませんが、コンパクトにまとめることは可能でしょうか? // ユーザーが検索した場合の処理 if (isset($_POST['keyword']) === TRUE && mb_strlen ($_POST['keyword']) > 0) { $keyword = trim($_POST['keyword']); try { $sql = 'SELECT product.id, name, price, img, status, stock FROM product JOIN item_stock ON product.id = item_stock.stock_id WHERE name like ?'; $stmt = $dbh->prepare($sql); $stmt->bindValue(1, $keyword, PDO::PARAM_STR); // SQLを実行 $stmt->execute(['%' . $keyword . '%']); $result = $stmt->fetchALL(); // 上記で検索した名前と部分一致する商品を探す if (count($result) > 0 ) { $msg[] = ($keyword . 'を含む商品が見つかりました!'); } else { try { // ステータスが1(公開)の販売商品のみを一覧で表示する $sql = 'SELECT product.id, name, price, img, status, stock FROM product JOIN item_stock ON product.id = item_stock.stock_id WHERE status = 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); //全て取得するのでfetchALLでレコードを取得する $result = $stmt->fetchALL(); $err_msg[] = ($keyword . 'を含む商品は見つかりませんでした。'); } catch (PDOException $e) { $err_msg[] = '商品を取得できませんでした。'; } } } catch (PDOException $e) { $err_msg[] = '商品を検索できませんでした。'; } } else { try { // ステータスが1(公開)の販売商品のみを一覧で表示する。 $sql = 'SELECT product.id, name, price, img, status, stock FROM product JOIN item_stock ON product.id = item_stock.stock_id WHERE status = 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); //全て取得するのでfetchALLでレコードを取得する $result = $stmt->fetchALL(); } catch (PDOException $e) { $err_msg[] = '商品を取得できませんでした。'; } }

    • ベストアンサー
    • PHP
  • SQL文の処理を関数化したいです

    SQL文をユーザー定義関数でまとめたいのですが、うまくいきません。 以下の処理を全てfunction search() { }の中に入れるのは間違っていますか? 関数名はsearchとしました。 try { $sql = 'SELECT product.id, name, price, img, status, stock FROM product JOIN item_stock ON product.id = item_stock.stock_id WHERE status = 1'; $stmt = $dbh->prepare($sql); $stmt->execute(); $result = $stmt->fetchALL(); $err_msg[] = ($keyword . 'を含む商品は見つかりませんでした。'); } catch (PDOException $e) { $err_msg[] = '商品を取得できませんでした。'; }

    • ベストアンサー
    • PHP
  • php mysqlのクエリでエラー

    「←追加」と追加したのですが、Warning: Invalid argument supplied for foreach()とエラーがでました。 調べたり、試行錯誤してみましたがダメでした。 何が間違っているのでしょうか? try{ $dbh = new PDO($dsn, $user, $password); print('接続に成功しました。<br>'); $dbh->query('SET NAMES utf8'); $sql = ('SELECT song.number, song.song_title, artist.artist, ka2.artist as artist_2, ka3.artist as artist_3, ka4.artist as artist_4, ka5.artist as artist_5, ka6.artist as artist_6, ka7.artist as artist_7, ka8.artist as artist_8, ka9.artist as artist_9, ka10.artist as artist_10, ka11.artist as artist_11, ka12.artist as artist_12, sakushi.sakushi, ss2.sakushi as sakushi_2, ss3.sakushi as sakushi_3, ss4.sakushi as sakushi_4, sakkyoku.sakkyoku, sk2.sakkyoku as sakkyoku_2, sk3.sakkyoku as sakkyoku_3, sk4.sakkyoku as sakkyoku_4, hennkyoku.hennkyoku, hk2.hennkyoku as hennkyoku_2, hk3.hennkyoku as hennkyoku_3, hk4.hennkyoku as hennkyoku_4, genre, gr2.genre as genre_2,←追加 tie_up, part FROM (((((((((((((((((((((((((((( song LEFT JOIN artist ON song.artist_1 = artist.artist_ID) LEFT JOIN artist ka2 ON song.artist_2 = ka2.artist_ID) LEFT JOIN artist ka3 ON song.artist_3 = ka3.artist_ID) LEFT JOIN artist ka4 ON song.artist_4 = ka4.artist_ID) LEFT JOIN artist ka5 ON song.artist_5 = ka5.artist_ID) LEFT JOIN artist ka6 ON song.artist_6 = ka6.artist_ID) LEFT JOIN artist ka7 ON song.artist_7 = ka7.artist_ID) LEFT JOIN artist ka8 ON song.artist_8 = ka8.artist_ID) LEFT JOIN artist ka9 ON song.artist_9 = ka9.artist_ID) LEFT JOIN artist ka10 ON song.artist_10 = ka10.artist_ID) LEFT JOIN artist ka11 ON song.artist_11 = ka11.artist_ID) LEFT JOIN artist ka12 ON song.artist_12 = ka12.artist_ID) LEFT JOIN sakushi ON song.sakushi_1 = sakushi.sakushi_ID) LEFT JOIN sakushi ss2 ON song.sakushi_2 = ss2.sakushi_ID) LEFT JOIN sakushi ss3 ON song.sakushi_3 = ss3.sakushi_ID) LEFT JOIN sakushi ss4 ON song.sakushi_4 = ss4.sakushi_ID) LEFT JOIN sakkyoku ON song.sakkyoku_1 = sakkyoku.sakkyoku_ID) LEFT JOIN sakkyoku sk2 ON song.sakkyoku_2 = sk2.sakkyoku_ID) LEFT JOIN sakkyoku sk3 ON song.sakkyoku_3 = sk3.sakkyoku_ID) LEFT JOIN sakkyoku sk4 ON song.sakkyoku_4 = sk4.sakkyoku_ID) LEFT JOIN hennkyoku ON song.hennkyoku_1 = hennkyoku.hennkyoku_ID) LEFT JOIN hennkyoku hk2 ON song.hennkyoku_2 = hk2.hennkyoku_ID) LEFT JOIN hennkyoku hk3 ON song.hennkyoku_3 = hk3.hennkyoku_ID) LEFT JOIN hennkyoku hk4 ON song.hennkyoku_4 = hk4.hennkyoku_ID) LEFT JOIN genre ON song.genre_1 = genre.genre_ID) LEFT JOIN genre gr2 ON song.genre_2 = gr2.genre_ID)←追加 LEFT JOIN tie_up ON song.tie_up_1 = tie_up.tie_up_ID) LEFT JOIN part ON song.part_1 = part.part_ID) ;');

  • 少し複雑な left join

    まだデーターベースを独学で始めて数ヶ月の初心者です。 以下(3行目のleft join)の記述では動かないのですが、どのように 記述したらよいのでしょうか? やりたい内容は3行目にあるようにbookedというテーブルの中のdateが 2013-06-05だけ抽出した形のテーブルを、timeTplというテーブルとleft join させたいです。 1 "select * 2 from 3 timeTpl as t left join (SELECT * FROM booked where date ="2013-06-05") as b 4 on 5 t.start >= b.startTime and t.start < b.finishTime || 6 t.finish > b.startTime and t.finish <= b.finishTime 7 where 8 t.time > 9 (select start 10 from class as c left join member as m 11 on c.className = m.class 12 where m.name = '$name') 13 ) 14 "; よろしくお願いします。

  • JOIN句の記述の違いによるパフォーマンスへの影響

    以下のEx1,2のJOIN句の記述方法の違いはクエリのパフォーマンスに影響するのでしょうか? 2万件程度のデータ量で試してみたのですが明確なパフォーマンスの違いを確認できませんでした。(1秒~2秒) 単純に書き方だけの違いであれば心置きなく自分ではわかりやすいと感じているEx1の記述方法で統一したいので。 よろしくお願いします。 -- /* SQL Server 2008 R2 */ -- /* 受注した全ての商品名を取得するクエリ(例) */ -- /* 登場テーブル・カラム */ -- // M_goods 商品マスタ -- // code 商品コード -- // name 商品名 -- // T_orders 受注テーブル -- // number 受注番号 -- // T_orderdetails 受注明細テーブル -- Ex.1 SELECT M_goods.name FROM T_orders LEFT JOIN T_orderdetails ON T_orders.number = T_orderdetails.number LEFT JOIN M_goods ON T_orderdetails.code = M_goods.code -- Ex.2 SELECT M_goods.name FROM T_orders LEFT JOIN T_orderdetails LEFT JOIN M_goods ON T_orderdetails.code = M_goods.code ON T_orders.number = T_orderdetails.number

  • 引数について

    すみません・・・。 ACCESSを使用してSQL構文を作成しているのですが 下記のようなテーブルを作成してpriceがnullのものだけ抜き出して ’ヌル値’と表示させたいと思っておりますが 「(tbl3.price,'ヌル値')の関数で使用されている引数の数が正しくない」というエラーとなってしまいます。 こちら原因は何によるものか教えて頂けないでしょうか・・・。 よろしくお願い致します。 id1,name id3,name 1 a     1  300 2 b     2  500 3 c     4  500 4 d     6  1200 5 e     8  1500 6 f     9  1500 7 g     10  10000 8 f 9 h 10 i select tbl1.id ,name ,price ,isnull(tbl3.price,'ヌル値') from tbl1 LEFT JOIN tbl3 ON tbl1.id=tbl3.id where price is null

  • 計算結果をPOSTするには?

    お世話になります。 $array_sale_price1=array($row["stock1_price"],$row["stock2_price"],$row["stock3_price"]); $sale_price1_max=max($array_sale_price1); $sale_price1_true1=$sale_price1_max * $row["profit1"]; $sale_price1_true=ceil($sale_price1_true1); $sale_price1_true1_not_stock_name=$row["buy_price"] * $row["profit1"]; $sale_price1_true_not_stock_name=ceil($sale_price1_true1_not_stock_name); if (empty($row["stock1_name"]) and empty($row["stock2_name"]) and empty($row["stock3_name"])) { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true_not_stock_name"; echo "\">"; echo"<p>"; echo "$sale_price1_true_not_stock_name"; echo"</p>"; echo"</div>"; } else { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true"; echo "\">"; echo"<p>"; echo "$sale_price1_true"; echo"</p>"; echo"</div>"; } $stock1_price_null=0; if (empty($row["stock1_name"])) { echo"<div class='stock_contents_case1'>"; echo "<input type = \"hidden\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price_null"]; echo "\">"; echo"<p>"; echo "---"; echo"</p>"; echo"</div>"; } else { echo"<div class='stock_contents_case1'>"; echo "<input type = \"text\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price"]; echo "\" style='width:25px'>"; echo"</div>"; } 中略 //利幅1の設定 echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"profit1[$row[item_id]]\" value =\""; echo $row["profit1"]; echo "\" style='width:25px'>"; echo"</div>"; 中略 While文でデータを取得し、配列でデータを渡すことでデータを一括して更新するフォームを作っています。上記のソースような形で、sale_price1を他のデータ(stock1_price stock2_price stock3_price profit1)から計算して求めるフォームを作っているのですが、ボタンを一度押しただけではstock1_price stock2_price stock3_price profit1は更新されますが、計算結果が入るべきデータ(sale_price1)が更新されず、もう1回ボタンを押すと計算結果のデータがMySQLに格納されます。 よくよく考えて見れば、1回目にボタンを押した段階では計算結果(sale_price1)は修正前のstock1_price stock2_price stock3_price profit1で計算された計算結果(sale_price1)がポストされているので修正後の計算結果(sale_price1)がMySQLに格納されないという事が判明したのですが、修正後の値(フォームに新規に入力した値)から計算された値をPOSTするには、どうしたらよいのでしょうか? 色々な事を試してみたのですが、どうもうまくいきません。ご教授いただけましたら幸いです。よろしくお願いします。

    • 締切済み
    • PHP
  • MySQL 5 PHP 5 データの受け渡しについて 困ってます。。

    MySQL 5 PHP 5 データの受け渡しについて 困ってます。。 下記内容で困ってます。機能としては (1)プロダクトテーブルからデータを読み込み表示。 ※プロダクトテーブルには商品データが8件登録されています。 (2)注文ボタンが押されたら受注テーブルにデータをカキコミ。 なんですが。。。 プロダクトテーブルから読み込んだデータを受注テーブルに書き込むと $product_id がいつも8(受注テーブルデータの一番最後の数字) $product_name  同じ $product_price 同じ ・・・ になってしまいます。 whileループしているので変数に代入するのも繰り返されて一番最後のデータが いつも格納されている状態だと思うのですが、この解決策を教えて下さい! 最近始めたばかりで良く理解出来ないので噛み砕いて教えてくれる方お願いします>< <?php //---------------------------------------- // □:テーブルからデータを読む //---------------------------------------- $mysql->query("SELECT * FROM products ORDER BY product_id") or die(mysql_error()); while($row = $mysql->fetch()){ $product_id = $row["product_id"]; $product_name = $row["product_name"]; $product_price = $row["product_price"]; echo <<<EOT <tr> <td align="center">$product_id<input name="product_id" type="hidden" value="$product_id" size="10" /></td> <td align="center">$product_name<input name="product_name[$product_id]" type="hidden" value="$new_product_name" size="10" /></td> <td align="right">$product_price<input name="product_price[$product_id]" type="hidden" value="$new_product_price" size="10" /></td> <td><input name="new_use_date[$product_id]" type="text" value="$new_use_date" size="20" /></td> <td><input name="new_use_time[$product_id]" type="text" value="$new_use_time" size="20" /></td> <td><input name="remarks[$product_id]" type="text" value="$new_remarks" size="40" /></td> <td><input name="submit_add" type="submit" value="注文する" /></td> </tr> EOT; } //ここまでwhileループ[終了の閉じカッコ] ?>

    • ベストアンサー
    • MySQL
  • 結合?の仕方がわからず困っています。

    こんにちは、ほぼ初心者ですがよろしくお願いします。 sqlite2 で以下のような倉庫テーブルと在庫数テーブルがあったとして、 手順5で、ある品物(item_id = 1)の倉庫ごとの在庫数を取得したいと思っています。 倉庫に結合する在庫データがなくても、 倉庫に対する行を取得できる SQL 文を教えていただけませんでしょうか? ※そもそもテーブルの作り方がおかしいでしょうか? その辺も含めてアドバイスいただけるとありがたいです。 -- 以下sqlite です .mode column .header ON -- 手順1 倉庫テーブル CREATE TABLE stock_sites ( id INTEGER NOT NULL PRIMARY KEY , name TEXT NOT NULL ); -- 手順2 在庫テーブル CREATE TABLE stocks ( id INTEGER NOT NULL PRIMARY KEY , stock_site_id INTEGER NOT NULL, item_id INTEGER NOT NULL, stock INTEGER NOT NULL, UNIQUE(stock_site_id, item_id) ); -- 手順3、倉庫データ INSERT INTO stock_sites(name) VALUES('site_A'); INSERT INTO stock_sites(name) VALUES('site_B'); INSERT INTO stock_sites(name) VALUES('site_C'); -- 手順4、在庫データ INSERT INTO stocks(stock_site_id, item_id, stock) VALUES(1,1,10); INSERT INTO stocks(stock_site_id, item_id, stock) VALUES(2,2,20); -- 手順5 ある品の倉庫ごとの在庫数を取得したい SELECT t1.name AS site_name, t2.* FROM stock_sites AS t1 LEFT JOIN stocks AS t2 ON t1.id = t2.stock_site_id WHERE t2.item_id = 1 ORDER BY t1.id; -- 結果 -- site_name  t2.id   t2.stock_site_id t2.item_id t2.stock -- ---------- ---------- ---------------- ---------- ---------- -- site_A   1      1         1     10 -- 欲しい結果 -- site_name  t2.id   t2.stock_site_id t2.item_id t2.stock -- ---------- ---------- ---------------- ---------- ---------- -- site_A   1      1         1     10 -- site_B -- site_C

  • mysqlで表の結合下記のように書きましたが

    mysqlで表の結合。 下記のように書きましたが、うまく動きません。 「left JOIN kashu ka2 ON song.kashu_2_ID = ka2.kashu_ID」 「ka2.kashu as kashu2」 ↑この部分、2つを追加しました。 何も表示されませんでした。 上の二つを削除すると動きます。 何がいけないのでしょうか? mysql_query("SELECT song.song_ID, song_name, song_name_yomi, kashu, kashu_yomi, sakushi, sakushi_yomi, sakkyoku, sakkyoku_yomi, hennkyoku, hennkyoku_yomi, tie_up.tie_up, ti2.tie_up as tie_up2, ka2.kashu as kashu2 FROM (((((( song left JOIN kashu ON song.kashu_1_ID = kashu.kashu_ID) left JOIN kashu ka2 ON song.kashu_2_ID = ka2.kashu_ID) left JOIN sakushi ON song.sakushi_ID = sakushi.sakushi_ID) left JOIN sakkyoku ON song.sakkyoku_ID = sakkyoku.sakkyoku_ID) left JOIN hennkyoku ON song.hennkyoku_ID = hennkyoku.hennkyoku_ID) left JOIN tie_up ON song.tie_up_1_ID = tie_up.tie_up_ID) left JOIN tie_up ti2 ON song.tie_up_2_ID = ti2.tie_up_ID where song_name like '%%'");

    • ベストアンサー
    • MySQL