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

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

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

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

Node.js

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

解決済

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

wowwo
wowwo

総合スコア1

MySQL

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

Node.js

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

1回答

0評価

0クリップ

155閲覧

投稿2022/06/13 21:26

編集2022/06/14 21:36

現在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 app.post('/create' , (req , res) =>{ 2 connection.query( 3 _//DB1にusername、todoを挿入_ 4 'insert into todoList(name ,todo) values(? ,?)', 5 [req.body.addListUserName/*formのuser名に入力したdata*/,req.body.addListAction/*formのtodoに追加したdata*/], 6 (error ,results) =>{ 7 connection.query( 8 'select phone from userInfo where name=?', 9 [req.body.addListUserName], 10 (error , results) =>{ 11 console.log(results); 12 connection.query( 13 'update todoList set phone=? where name=?', 14 [results , req.body.addListUserName], 15 (error , results) =>{ 16 res.redirect('/list'/*todoリスト一覧*/); 17 } 18 ); 19 }); 20 }); 21 });

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hoshi-takanori

2022/06/13 23:26

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

2022/06/13 23:39

その通りです。記載が間違っておりました。正しくは複数のテーブルです。
gU8C8Nud4E8p3uW

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となってしまいます。
gU8C8Nud4E8p3uW

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やテーブル設計に関してまだまだ勉強不足であり、課題が多いと再認識できました。ありがとうございます。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

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

Node.js

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