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

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

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

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

PHP

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

Q&A

解決済

1回答

1177閲覧

MySQLで単一レコードの複数カラムから別テーブルの一致レコードをリクエストする方法

sika

総合スコア52

MySQL

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

PHP

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

0グッド

0クリップ

投稿2017/06/17 10:36

WEBページにてオブジェクト同士をドラッグ操作で並び替えをして
その隣接したオブジェクト同士の関連URL一覧を比較するといった自作システムを作成しています。
その比較の前段階として選択したひとつのオブジェクトのURL一覧を格納するための工程にて質問させていただきます。

処理の流れとしてはAjaxの非同期通信でオブジェクトを選択したIDをキーとして
PHPで**『マスターテーブル』**にコマンドリクエストして

【マスターテーブル】
┌ ─ ─ ─ ┬ ─ ─ ─ ┬ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ┐
│ ID │ NAME │ URL_01 │ URL_02 │ URL_03 │ URL_04 │
├ ─ ─ ─ ┼ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ┤
│ 1 │ NAME │ URL_id① │ URL_id② │ URL_id③ │ URL_id④ │




│ 100 │ NAME │ URL_id① │ URL_id② │ URL_id③ │ URL_id④ │
└ ─ ─ ─ ┴ ─ ─ ─ ┴ ─ ─ ─ ─ ┴ ─ ─ ─ ─ ┴ ─ ─ ─ ─ ┴ ─ ─ ─ ─ ┘

その結果レコードから、さらにその複数カラム
「URL_01」「URL_02」「URL_03」「URL_04」(今後増える可能性あり)に入力された"URL_ID"を
それぞれ**『外部サイトテーブル』**から抽出させて

【外部サイトテーブル】
┌ ─ ─ ─ ┬ ─ ─ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ─ ─ ┐
│URL_id │ SITE_NAME │ URL │
├ ─ ─ ─ ┼ ─ ─ ─ ─ ─ ─ ┼ ─ ─ ─ ─ ─ ─ ┤
│ 1 │ サイト名 │ http//~ │




│ 200 │ サイト名 │ http//~ │
└ ─ ─ ─ ┴ ─ ─ ─ ─ ─ ─ ┴ ─ ─ ─ ─ ─ ─ ┘

**『マスターテーブル』**のURL_ID項目の数だけ配列として出力したいのです

【出力させたい配列結果】

php

1// マスターテーブル"ID"の33をリクエストした場合 2$arrayURL = array( 3 array( 4 'ID' => 165, 5 'SITE_NAME' => サイト名, 6 'URL' => 'http://~', 7 ), 8 array( 9 'ID' => 87, 10 'SITE_NAME' => サイト名, 11 'URL' => 'http://~', 12 ), 13 14151617);

結果的には上記の様な配列として格納できるテーブル出力できるSQLコマンドがわかりません。

また、現在構想している自作ページのシステムの根本的な仕様上、
このAjaxによるリクエスト操作が短時間に高頻度で行われるため、その都度

①Ajaxリクエスト
②PHPでDBコマンド
③DBデータを配列格納
④Ajaxで配列受け取り
⑤JSで配列分解・DOM操作

という一例流れが、主にサーバーサイド側(サーバー負担やメンテナンス面)の不安要素やデメリットが無いか?
選択オブジェクトのIDもとに参照するのが結果的に『外部サイトテーブル』のレコードならば
現時点では『外部サイトテーブル』のデータレコードが4桁5桁と頻繁には増えない予定ですので
その程度のボリュームのデータならば事前に1度だけページアクセス時に参照オブジェクトのひとつとして読み込んでしまい、細かい参照処理はJSだけで行ってしまった方が良いのか?

質問の要点としては
①.上記内容を一回でリクエストできるSQL構文
②.本件の概要のシステム設計としては前者と後者(または別設計)ではどちらが向いているか?

どちらかでも構いませんので、ご教授宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

①.上記内容を一回でリクエストできるSQL構文

sql

1SELECT o.* 2FROM master AS m 3LEFT OUTER JOIN outer_site AS o 4 ON o.URL_id IN (m.URL_01, m.URL_02, m.URL_03, m.URL_04) 5WHERE m.ID = 33;

実行結果 : http://sqlfiddle.com/#!9/7878d/1

②.本件の概要のシステム設計としては前者と後者(または別設計)ではどちらが向いているか?

私の所感としては、
【外部サイトテーブル】の更新頻度が低い(多少、古いデータを見せてしまってもかまわない)のであれば、
「一度 Ajaxリクエストしたデータだけをオブジェクトとして保持しておき、次回以降はそれを参照する」
くらいがちょうどよいのではないかと思います。

ただし、

短時間に高頻度

のリクエストというものが具体的にどの程度なのか、
さらにはサーバやクライアントのスペック、ネットワークの環境なども不明なので、
確かなことは言えません。

『前者』の設計でも心配するほどの負荷にならない可能性もありえますし、
むしろ下手にチューニングすることで

  • 想定外の場所がボトルネックになったり、
  • バグを生じやすくなったり、
  • アプリケーションを変更しにくくなったり

する可能性も考えられるからです。

早めに実装して性能試験を行なってみるしかないのではないでしょうか。

投稿2017/06/17 15:50

編集2017/06/17 15:51
KiyoshiMotoki

総合スコア4791

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

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

sika

2017/06/17 17:40

検証ページまでありがとうございます。 IN演算子の概念を理解する事ができました。 私自身、サーバーサイドの知識が乏しいため 実装後に想定外のバグで対応が遅れる事も避けたいので 「一度 Ajaxリクエストしたデータだけをオブジェクトとして保持しておき、次回以降はそれを参照する」案で仕様変更を試みてみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問