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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

268閲覧

Node.jsによるtable間のデータ共有方法について

wowwo

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2022/06/13 21:26

編集2022/06/14 02:10

現在node.jsを用いて電話帳機能を持ったtodoリストの作成をしています。
DB内にtodoList[id , userName , todo , phone] , userInfo[id , usrename , phone]の2つのtableがあります。
内容としては
①userInfoにuserNameとphoneを登録しておく
②formよりuser名とtodoを入力しtodoListにデータを挿入する
③②の際userInfoに共通するuser名があった場合、formに入力されたusre名・todoに加えuserInfoから取得した電話番号をtodoListに追加する。
④todoListのデータが’/list’にてtodoリストとして表示されます。

todoListにuserNameとtodoを挿入し、userInfoから共通する電話番号を取得するところまではできたのですが、そのデータをtodoListに追加する方法がわかりません。以下コードです。

Node.js

1 1 app.post('/create' , (req , res) =>{ 2 2 connection.query( 3 3 _//DB1にusername、todoを挿入_ 4 4 'insert into todoList(name ,todo) values(? ,?)', 5 5 [req.body.addListUserName/*formのuser名に入力したdata*/,req.body.addListAction/*formのtodoに追加したdata*/], 6 6 (error ,results) =>{ 7 7 connection.query( 8 8 'select phone from userInfo where name=?', 9 9 [req.body.addListUserName], 1010 (error , results) =>{ 1111 console.log(results); 1212 connection.query( 1313 'update todoList set phone=? where name=?', 1414 [results , req.body.addListUserName], 1515 (error , results) =>{ 1616 res.redirect('/list'/*todoリスト一覧*/); 1717 } 1818 ); 1919 }); 2020 }); 2121 });

11行目のconsole.logで確認すると電話番号の取得はできています。また、12行目以下の処理において13行目のphone=?の?部分を数字に置き換えると、todoListのデータ更新もできますが、現在のコードではtodoListのphoneはnullとなってしまいます。どなたか解決方法をご教授いただければ幸いです。

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

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

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

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

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

hoshi-takanori

2022/06/13 23:26

複数のデータベースを扱うなら connection も複数必要だと思いますが、もしかして複数のテーブルってことでしょうか?
wowwo

2022/06/13 23:39

その通りです。記載が間違っておりました。正しくは複数のテーブルです。
退会済みユーザー

退会済みユーザー

2022/06/14 00:08

DB1、DB2の表記は誤解を招くので、テーブル名でもう一度説明を見直して簡潔にしてください。「何を実現したいのか」「そのためにどういう手続や処理の手順を踏むのか」を明瞭に。
hoshi-takanori

2022/06/14 01:43

select phone from userInfo … の結果 results を確認しましょう。たぶん [] または [{ phone: "123-456-7890" }] みたいなのが返ると思うので、[] ならユーザー未登録、そうでなければ phone の値を取り出せぼ良いかと。
wowwo

2022/06/14 02:16

ご回答ありがとうございます。 select phone from userInfo … のresultsはおっしゃる通りの結果が返っています。 userInfoから取得してきた結果のresultsをtodoListのphoneに更新したいのですが、現在のコードではtodoListのphoneはnullとなってしまいます。
退会済みユーザー

退会済みユーザー

2022/06/14 02:23

todoList の中で、同じ name の人がいなくて必ずゼロかイチだったらいいけど、そうなの? insert into todoList したときのレコードの主キー(例えばidとか)を押さえておかないと、全く同じレコードに対する更新を後からなんてできないよ。
hoshi-takanori

2022/06/14 03:02

つまり、 ・results = [] ならユーザー未登録ならスキップ ・results = [{ phone: "123-456-7890" }] なら、そこから "123-456-7890" の部分を取り出して todoList にセット という処理を書きましょう。 そして、spYD4RV7UIQmPhs さんのおっしゃる通り、現状のテーブル設計はあまりいけてないように見えるので、その辺も考えると良いとは思いますが、まずは上記の処理ができるようになってからですね。
wowwo

2022/06/14 12:30

todoListの中はnameが同一の人がいない前提で作っていました。 お二人のおっしゃる通りidやテーブル設計に関してまだまだ勉強不足であり、課題が多いと再認識できました。ありがとうございます。
guest

回答1

0

ベストアンサー

insert into todoList する前に select phone from userInfo where name=? ができそうな気もします。
なぜ、insert into todoList してから select phone from userInfo して update todoList なのか、
順番を入れ替えできないんでしょうか?

使える情報かわかりませんが、
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.5.1 INSERT ... SELECT 構文
insert into ~ select構文を使えば、
レコード挿入結果を用いてついでにselectもできるので、
追加したユーザーのidを取得することも可能なはず。

idを抑えておけば、
後からupdateすることも可能なはず。と。

投稿2022/06/14 02:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

wowwo

2022/06/14 12:36

ご回答ありがとうございます。順番を入れ替えることは思いつきませんでした。 教えていただいたリファレンスマニュアルを参考にさせていただき 'update todoList , userInfo set todoList.phone = userInfo.phone where todoList.name = userInfo.name' でひとまず思った通りの動きはできました。 おっしゃる通りidを取得し更新するのがきれいな形なのでしょう。 まだまだ知識不足・経験不足のため今後も精進したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問