質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1890閲覧

在庫テーブルから最も大きなidに対する値を取得したい。

Mityu_ka

総合スコア5

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2021/11/09 13:40

したいこと

在庫テーブル(stock)に同じ商品番号(val_number)がある場合、
どうすれば最も大きなidに対するstock_numberが取得できるのでしょうか?

  1. 商品の在庫テーブル:stockに、商品の色やサイズを格納したテーブル:valを結合。
  2. 商品を販売するごとに在庫テーブル(stock)へ在庫数を保存。
  3. foreachのループ処理をして、商品の色やサイズ毎の在庫数を

在庫テーブル(stock)の最も大きなidでソートして表示したい。
※下記のWordPressの表示画面は商品の詳細ページです。
在庫テーブルにもあるitem_numberを$_GET['item_number']で取得し、
WHEREの条件分岐に使用しています。
###現状について
在庫テーブル(stock)で同一val_numberがある場合、
idが最も大きい場合のstock_numberを表示させたいのです。
ですが、WHEREにMAX(id)を設定しても最初のidに対するstock_numberしか取得できていません。

WordPressの表示画面です????
イメージ説明
在庫テーブル:stockのデータです????
イメージ説明
商品の色やサイズ情報のテーブル:valのデータです????
イメージ説明

PHP

1$itemNumber = $_GET['item_number']; 2$stock_sql = 3 "SELECT 4 st.id AS ids, 5 st.item_number AS numbers, 6 st.stock_number AS stocks, 7 v.val_number AS stock_valnumber, 8 v.val_color AS stock_color, 9 v.val_size AS stock_size 10 FROM stock st 11 INNER JOIN val v 12 ON st.val_number = v.val_number 13 WHERE st.item_number=$itemNumber 14 GROUP BY st.val_number 15 "; 16$stock_query = $wpdb->prepare($stock_sql, 1, "PHP"); 17$stock_Datas = $wpdb->get_results($stock_query); 18echo '<table>'; 19echo '<form action="/sales/salesdetail/check?item_number='.$itemNumber.'" method="POST" enctype="multipart/form-data">'; 20echo '<tr>'; 21echo '<th>色/サイズ</th><th>在庫</th><th>商品の選択</th>'; 22echo '</tr>'; 23foreach($stock_Datas as $stock_Data){ 24 echo '<tr>'; 25 echo '<td>'.$stock_Data->stock_color.'/'.$stock_Data->stock_size.'</td>'; 26 if($stock_Data->stocks > 0){ 27 echo '<td>'.$stock_Data->stocks.'</td>'; 28 echo '<td><input type="radio" name="val_number" id="val_number" 29 value="'.$stock_Data->stock_valnumber.'"></td>'; 30 echo '<input type="hidden" name="item_number" value="'.$stock_Data->numbers.'">'; 31 echo '<input type="hidden" name="val_color" value="'.$stock_Data->stock_color.'">'; 32 echo '<input type="hidden" name="val_size" value="'.$stock_Data->stock_size.'">'; 33 } else { 34 echo '<td>×</td>'; 35 echo '<td>×</td>'; 36 } 37echo '</tr>'; 38echo '</table>'; 39echo '<button class="next-btn" type="submit">確認する</button>'; 40echo '</form>'; 41}

###試したこと

PHP

1WHERE 2 st.id = 3 (SELECT MAX(st.id) 4 FROM stock 5 WHERE st.item_number=$itemNumber) 6GROUP BY st.val_number

どのようにすれば在庫テーブル(stock)で同一val_numberがある場合に
最も大きなidに対するstock_numberが取得できるのでしょうか?
※「達人に学ぶSQL徹底指南書」や「SQLアンチパターン」を読みながら模索していますが、
実装できていません。
教えて頂けると幸いです。
###使用環境

  • Local by Flywheel
  • MySQL
  • WordPress
  • VS Code

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

無事解決しました

正しいコードは以下の通りです。

PHP

1WHERE 2 st.id IN (SELECT MAX(st.id) 3 FROM stock AS st 4 WHERE st.item_number=$itemNumber 5 GROUP BY st.val_number 6 ) 7GROUP BY st.val_number

##val_number毎の最大idを取得出来なかった理由
・WHERE句でSELECTしていてるテーブル名(stock)に「AS st」を付けていなかったこと。
・GROUP BYをつけていなかったこと。

SQLの基本は変わらないはずなので、ソートする場所を変えることで実装に近づきそうです。

投稿2021/11/14 05:09

Mityu_ka

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問