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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

2回答

1779閲覧

配列関数が使用可能なデータベースについて

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2019/08/21 02:52

編集2019/08/21 03:18

データベースを使い始めて間もないのですが、こちらへ以前投稿した内容の続きみたいなことになります。

MySQLを使って配列を結合するようなことを試みています。
現在では、MySQLの「ビュー設定」を下記の通りにコーディングし、CSVでの出力結果から「テキストエディタ」で囲い文字を削除して強制的に結合しています。

CREATE VIEW view_process_plan AS SELECT saler_name, LPAD( customer_code , 5 ,'0'), customer_name, product_num, direction_num, branch_num, parts_num, parts_name, product_quantity, DATE_FORMAT( desired_date , '%m/%d' ), DATE_FORMAT( answer_date, '%m/%d' ), DATE_FORMAT( work_date, '%m/%d' ), unit_price, amount_money, GROUP_CONCAT(process_code separator ',') FROM process_plan GROUP BY   desired_date, product_num, branch_num ORDER BY customer_code

上記コードの”GROUP_CONCAT(process_code separator ',')”をMySQLで行っています。

このビューを実行すると、"1111","2222","3333","AAA,BBB,CCC"みたいに出力されるため、これをCSVで出力してメモ帳で開き、囲み文字(”)を全文置換(削除)して「1111,2222,3333,AAA,BBB,CCC」となるよう変換して利用しています。

これをできることなら「配列関数が使用可能なデータベースに置換え、メモ帳などの別ツールを使用しなくても結合状態で出力する」ことができないものかと思案しています。

以前質問させていただきました際には「PostgreSQL」では配列関数があるような話もすこし出ていたようなので、配列を自在に追加することが可能なデータベースがありましたら、教えていただけますでしょうか。

最終的には、PHPを使って「CSVをデータベースに登録し、ビュー結果をCSVで出力したい」と考えています。

可能であれば、上記コードで再現できるようコードを教えていただければ嬉しいのですが、そこは”甘え”と思われる場合は無視して頂いて構いません。よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/08/21 02:59 編集

今回「PHP」「TomCat」は不要ではないでしょうか。 「データベース」のタグは必要に思います。 また下記は意味が分かりません。 >メモ帳などの別ツールを使用 急に出てきた「メモ帳」はどういう意図があるのでしょうか
退会済みユーザー

退会済みユーザー

2019/08/21 03:16

概ね修正・追記いたしました。
m.ts10806

2019/08/21 04:17

PHPは最終的なもので本件に直接関係ある内容ではないのでなくてもいいかなと。 細かいところなのでお任せしますが「適切なタグをつける」のを心がけるようにしてもらったらと。 https://teratail.com/help/question-tips#questionTips3-2
guest

回答2

0

配列を自在に追加することが可能なデータベースがありましたら、教えていただけますでしょうか。

配列を扱う事に主眼を置くなら、postgresでしょうね。
MySQLではなくMariaDBをお使いなら、MySQLでしか使えない分析関数なども使用できますので、それ以外のもメリットはあります。

ただ、あくまで利用する目的に対して大きなデメリットが無いならという前提です。

MySQLのままであれば、Json型を利用したり、Viewの代わりにストアドプロシージャにしてその内部で配列処理を行うなどの方法も考えられます。

投稿2019/08/21 04:17

sazi

総合スコア25184

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

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

0

ベストアンサー

> データベースを使い始めて間もない

のであれば GROUP_CONCATへの理解も浅いのでしょうね
実際、カラムにふくまれるデータをあたかも配列のように処理するにはいくつか方法があります

  • テキスト系のカラムにカンマ区切りで保持してFIND_IN_SETで検索
  • JSON型のカラム利用
  • 全文検索

ただし、上記は結果としてはバラバラにデータをもってGROUP_CONCATすることと
同じ様な機能に見えますが、効率的なデータの持ち方ではなくオルタナティブな処理にはなりません。
正規化をきちんと学習して、GROUP_CONCATを選択するのが最適な場合があることを
理解してください

追記

1点気になったのですが

"1111","2222","3333","AAA,BBB,CCC"みたいに出力される

とありますが、GROUP_CONCAT(process_code separator ',')としても、
エンクロージャが勝手に付加されることはないと思います。
元データのそれぞれが「"」で囲まれているようなことはありませんか?

SQL

1create table tbl(id int,val varchar(10)); 2insert into tbl values 3(1,'"1111"'), 4(1,'"2222"'), 5(1,'"3333"'), 6(1,'"AAAA,BBBB,CCCC"'), 7(2,'"XXXX"'); 8select id,group_concat(val) as vals from tbl group by id;

対応策

SQL

1select id,group_concat(replace(val,'"','')) as vals from tbl group by id;

投稿2019/08/21 03:14

編集2019/08/21 03:54
yambejp

総合スコア114814

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

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

退会済みユーザー

退会済みユーザー

2019/08/21 04:01

貴殿のご指摘内容が理解できず申し訳ございません。当方環境においては、投稿したコードで動作しているので、問題ないかと思っています。phpMyadminで実行結果を確認しても、GROUP_CONCAT(process_code separator ',')の結果はカンマ区切りで出力されています。 もしこれが「正規表現ではないから」ということであればなんとかします。
yambejp

2019/08/21 04:12

ごめんなさい、理解いただいていないようですね process_codeにダブルクォーテーション付きのデータが保持されているはずということです 仮にそうであってもreplaceすればいけませんか?という回答ですが 私のサンプルでなにか試していただきましたか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問