mysql+PHPを利用していますが、表記の件で数日間悩んでおります。
実際に可能な操作かどうかもわかりません。
よいお知恵があったら教えてください。
下のようなテーブルがそれぞれあります。
table1
ID・得意先コード・受注内容・受注金額
1・ 28 ・ xxxx ・ 10000
2・ 32 ・ aaaa ・ 5000
3・ 28 ・ YYYY ・ 20000
4・ 15 ・ tttt ・ 15000
5・ 32 ・ kkkk ・ 3000
(得意先コードはtable2のIDです)
table2
ID・得意先名・受注金額合計
15・ BBB・
28・ CCC・
32・ DDD・
PHPファイルを実行する度に、
「table1」の「受注金額」を「得意先コード」ごとに集計した各値を、「table2」の各「受注金額合計」にそれぞれ更新していきたいと思っています。
色々調べたところ以下の構文が紹介されていたので試してみました。
Update table2 set 受注金額合計 = (select sum(受注金額) from table1 INNER JOIN table2 ON table1.得意先コード = table2.ID)
すると「#1064 - You have an error in your SQL syntax」というエラーが出てしまいました。select以降の構文が良くないらしいのですが、私の書き方が悪いのか、それすらもわからない状態です。
MySQLは4.0.24、PHPは4。レンタルサーバーを利用しています。
なにとぞよろしくお願いします。
No.3ベストアンサー
- 回答日時:
あら・・・そうですか、私の手元には3.23系と5.0系の環境しかなく
4.0系の環境がないため検証ができずお役に立てず申し訳ないです。
>SUM(kingaku) as totalの「total」とは何を示すのでしょうか
table1のkingakuSUMしたものに別名を付けています。
別名をつけないとそのあとでてくる
set total_kingaku=t1.totalのところで指定ができないので
別名は適当な名前で結構です。
ちなみに以下のように2段階でテンポラリをつくれば、3.23系でもできるます。
REPLACEを使うので、table2のIDにUNIQUE属性をつけておく必要があります。
CREATE TEMPORARY TABLE T1
SELECT client_id,sum(kingaku) as kingaku
FROM table1
GROUP BY client_id;
CREATE TEMPORARY TABLE T2
SELECT ID,client_name,T1.kingaku
FROM table2 as t2
INNER JOIN T1 ON ID=client_id;
REPLACE table2
SELECT * FROM T2;
yambejpさん、わざわざテンポラリ作成のSQLを教えていただき、ありがとうございます。
教えていただいたSQLを実行してみたところ、目的どおりの結果が得られました。
UNIQUE属性やREPLACEなど、これまでに使ったことがない物ばかりでした。
PHPで利用するため、複数のSQLがPHPで利用可能かどうかをこれから調べてみたいと思います。
No.5
- 回答日時:
>PHP側で計算というのは、SQLのテーブルに計算結果を更新せず、ブラウザで計算結果を表示させるのみ。
ということでしょうか。いえいえ、PHPを使って、table1から得意先コードごとの金額を抽出して合計し、table2の「受注金額合計」にその合計額を入れるのです。
「PHPファイルを実行する度に…」と書いていらっしゃいますので、そのPHPファイルの末尾にでも、上記の処理を書いておくだけです。
ごくごくシンプルなことで、何も悩む部分はないと思うのですが・・・?
>いえいえ、PHPを使って、table1から得意先コードごとの金額を抽出して合計し、table2の「受注金額合計」にその合計額を入れるのです。
知識不足ですみません。
この方法がわからなかったので質問させていただいたのですが、SQL以外で方法があるのでしょうか。
No.4
- 回答日時:
計算としては非常に簡単なものですが、それをSQLで書くとちょっとややこしくなるので、その程度ならPHP側で計算したらどうでしょうか。
レコード数にもよりますが、大した負荷ではないと思います。
nick9090さん、ご回答ありがとうございます。
PHP側で計算というのは、SQLのテーブルに計算結果を更新せず、ブラウザで計算結果を表示させるのみ。ということでしょうか。
No.2
- 回答日時:
ごめんなさい。
途中になっちゃいましたこんな感じでどうでしょう?
Update table2
left join (
select 得意先コード,sum(受注金額) as total from table1
GROUP BY 得意先コード
) as t1 on t1.得意先コード=table2.ID
set 受注金額合計=t1.total
ありがとうございます。
折角回答していただきましたが、質問の際と同じエラーが表示されました。
やはりVerの問題でしょうか。
実際に行ったSQLは、「得意先コード」を「client_id」、「受注金額」を「kingaku」として、以下のように修正したものを実行しました。
UPDATE table2 LEFT JOIN (SELECT client_id,SUM(kingaku) as total FROM table1 GROUP BY client_id) as table1 ON table1.client_id=table2.id SET kingaku_total=table1.total
それと、気になったのはSUM(kingaku) as totalの「total」とは何を示すのでしょうか。補足をいただけるとありがたいです。
No.1
- 回答日時:
yambejpさん、早速のお返事ありがとうございます。
4.04以降ですか。そこまで調べませんでした。
まだ調べてないことが多そうです。
レンタルサーバーを利用している以上、複数テーブルを使うUPDATEは不可能ということでしょうか。残念です。
SELECTで表示させることはできたのですけど。
もう少しがんばって他の方法を考えてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- マンガ・コミック BL注意。受けが可愛くて濡れ場もあるBL漫画教えて欲しいです! 1 2022/09/19 01:47
- Oracle SQL update方法 2 2022/06/22 14:07
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- 工学 以前、線形代数からフーリエ級数展開を導く上で 式v=(v, e1)e1+(v, e2)e2+…+(v 6 2022/06/29 17:24
- その他(データベース) accessについて 2 2022/05/31 16:58
- 国民年金・基礎年金 個人事業主が障害者年金を受給中、確定申告時に所得の計算をした時に所得額が4,721,000円を越えて 2 2022/08/11 18:03
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
- その他(アニメ・マンガ・特撮) 腐女子とBL、ゲイについて。 27歳男、ゲイです。 私は腐女子が大嫌いです。腐女子という言葉なんて無 8 2023/08/24 03:03
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルの集計値を別テーブル...
-
GROUP BYを行った後に結合した...
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
-
MERGE文を単体テーブルに対して...
-
Date型にNULLをセットしたい V...
-
レコードセット(ADO.Recordset)...
-
ファイル書込みで一行もしくは...
-
ACCESSの集計クエリで3件ある...
-
Excelで、改行がある場合の条件...
-
SQL文で右から1文字だけ削除す...
-
SQLの書き方(チェックボックス)
-
レコードが存在しなかった場合
-
GROUP BYを使ったSELECT文の総...
-
ADO VBA 実行時エラー3021
-
select insertで複数テーブルか...
-
select句副問い合わせ 値の個...
-
SQL>UPDATEと同時にその件数を...
-
OracleのSQL*PLUSで、デー...
-
ACCESSで大量の更新を行うと「...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリでフィールドの...
-
テーブルの集計値を別テーブル...
-
ちなみになぜv=(v・e1)e1+(v・e...
-
枝番と主キーがある複数テーブ...
-
ある条件を含まないというクエ...
-
ACCESS VBA レコードセットの参...
-
全パターンを出力するSQL文
-
一方のテーブルではカラム名と...
-
COUNTについて
-
Accessでオートフィルタ...
-
同じ列に2行づつで出力するSQL
-
MYSQLの差集合について
-
MYSQL 異なる DB 結合
-
SQL構文について質問いたします。
-
既存のテーブルに重複フラグを新設
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
Accessで別テーブルの値をフォ...
-
SELECTで1件のみ取得するには?
-
SQL文で右から1文字だけ削除す...
おすすめ情報