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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

1回答

800閲覧

SQL 複数のテーブルから配列作成

expy

総合スコア103

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2019/04/09 03:10

イメージ:チェーン店
phpでログイン時にuser_idを取得
その後、ユーザの持つ権限を一括で取得するSQLが分かりません。
例:

・role「A店長」なら  A店に対する機能A、機能B、機能C ・role「〇〇地区エリア長」なら  本店に対する機能A、機能D  A店に対する機能A  B店に対する機能A、機能B

テーブル構成

・user  user_id, role_id ・role  id, name ・role-auth  id, store_id, auth_id ・auth  id, name ・store  id, name, address 例: ・user  1,3 ・role  3,〇〇地区エリア長 ・role-auth  3,1,1  3,1,4  3,2,1  3,3,1  3,3,2 ・auth  1, 追加  2, 更新  3, 削除  4, etc ・store  1, 本店, 〇〇町  2, A店, ××町  3, B店, △△町

これを取得するSQLがどうなるのか分かりません。
最終的には二次元配列のような形でメモリ上に持っておきたいと思っています。

user_id, role_id, role_name{ store_id, store_name{ auth_id, auth_name auth_id, auth_name auth_id, auth_name } store_id, store_name{ auth_id, auth_name auth_id, auth_name auth_id, auth_name } }

根本的に何か勘違いしていたらすみません。

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

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

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

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

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

m.ts10806

2019/04/09 03:27 編集

外部結合、内部結合と聞いてピンと来ますか? あと「サブクエリ」
expy

2019/04/09 03:30

innner joinとサブクエリでなんとかしようとしてどうにもならず… 組み合わせというかどの順番でどうすれば良いのかわかりませんでした。
m.ts10806

2019/04/09 03:43

そのなんとかしようとしてやってみたことを質問に追記してください。 やろうとしている方向性がわかればまたアドバイスもしやすくなります
expy

2019/04/09 04:43

回答いただいたGROUP_CONCATで色々試してみます。 ありがとうございました。
m.ts10806

2019/04/09 04:44

質問は編集できますので適宜追記いただければと
expy

2019/04/09 04:47

ありがとうございます!
guest

回答1

0

ベストアンサー

SQL

1select * 2from user 3 left join role on user.role_id = role.id 4 left join role-auth on user.role_id = role-auth.id 5 left join auth on role-auth.auth_id = auth.id 6 left join store on role-auth.store_id = store.id

取得は上記で可能だと思います。
配列に畳む部分をSQLで行いたいなら、(MYSQL)GROUP_CONCATを利用するというのも手だと思います。

投稿2019/04/09 03:30

編集2019/04/09 04:13
sazi

総合スコア25195

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

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

expy

2019/04/09 04:44

GROUP_CONCATという機能があるんですね。 試してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問