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

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

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

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

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

6518閲覧

配列をデータベースに保存し、取り出せるようにしたい

jsrookie

総合スコア24

MySQL

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

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

1グッド

1クリップ

投稿2019/10/06 10:56

発生している問題、目指している形

例えば
array=[
[ ["a",1], ["b",2] ],
[ ["c",3], ["d",4] ]
];
のような多重配列があるとき、この配列をmysqlのデータベースに格納し、取り出すときは同じ形の配列として取り出すようにしたいです。

私が勉強した本ではテキストエリアの内容を保存する方法しか載っていなかったのでテキストエリアに配列を文字列にして表示し、それをデータベースに送信して保存したのですが、テキストエリアに表示すると[]が消えて文字の間にカンマが入り、a,1,b,2,c,3,d,4のようになり多重配列の形が崩れてしまいました。

ご教授お願いします。

フレームワークExpressでExpress Generatorを使用しています。

該当のソースコード

↓views\hello\add.ejs

<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Circuit Simulator</title> <link rel="stylesheet" href="/stylesheets/style.css" /> <script src="https://code.jquery.com/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script> <link type="text/javascript" src="js/cktsim.js"> <link type="text/javascript" src="js/schematic8.js"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> </head> <body> <div role="main"> <form method="post" action="/hello/add" name="test"> <table> <tr> <td><textarea type="text" name="arr" rows="10" cols="60"></textarea></td> </tr> <tr> <th></th> <td><input type="submit" value="作成"></td> </tr> </table> </form> </div> <script> array=[ [ ["a",1], ["b",2] ], [ ["c",3], ["d",4] ] ]; document.test.arr.value = array; </script> </body> </html>

↓routes\hello.js

var express = require('express'); var router = express.Router(); var mysql = require("mysql"); var knex = require("knex")({ dialect: "mysql", connection: { host : "localhost", user : "root", password : "", database : "db", charset : "utf8" } }); var Bookshelf = require("bookshelf")(knex); var MyData = Bookshelf.Model.extend({ tableName: "mydata" }); //MySQLの設定情報 var mysql_setting = { host : "localhost", user : "root", password : "", database : "db" }; //GETアクセスの処理 router.get('/', (req, res, next) => { //データベースの設定情報 var connection = mysql.createConnection(mysql_setting); //データベースに接続 connection.connect(); //データを取り出す connection.query("SELECT * from mydata", function (error, results, fields) { //データベースアクセス完了時の処理 if (error == null){ var data = {title:"mysql", content:results}; res.render("hello", data); } }); //接続を解除 connection.end(); }); //ADD //GETアクセスの処理 router.post('/add', (req, res, next) => { var ar = req.body.arr; var data = {"arr":ar}; //データベースの設定情報 var connection = mysql.createConnection(mysql_setting); //データベースに接続 connection.connect(); //データを取り出す connection.query("insert into mydata set ?", data, function (error, results, fields) { res.redirect("/hello"); }); //接続を解除 connection.end(); }); module.exports = router;
退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

JSON.stringify で文字列にして格納し、
取り出す時は JSON.parseするというのではどうですか?

投稿2019/10/06 12:31

tanishi_a

総合スコア484

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

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

jsrookie

2019/10/08 09:34

回答ありがとうございます。 JSON.stringifyを利用したところ無事多重配列を文字列で保存できるようになりました。 JSON.parseの方はまだ取り出しができていないので試せていませんが試行錯誤してみます。 ありがとうございました。
guest

0

データ例を見ると、key:valueを配列で保持しているように見えます。
json型をさらに配列でという事でしょうか。
postgresのような配列が扱えるDBMSに変更するのも、選択肢の一つ

投稿2019/10/07 01:39

編集2019/10/07 01:41
sazi

総合スコア25195

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

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

jsrookie

2019/10/08 10:08

DBMSの変更も考えていこうと思います。 ありがとうございました。
guest

0

基本的にはJSON関数を利用するしかありませんが
MySQL側でもカラムにJSON型を利用すれば効率は高くないですが
DB側での検索処理をかけることも可能です

投稿2019/10/07 00:40

yambejp

総合スコア114839

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

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

jsrookie

2019/10/08 09:34

カラムは現在はVARCHARにしています。 検索や取り出しはまだしていませんが、JSON型にして今後やってみようと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問