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

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

ただいまの
回答率

90.76%

  • MySQL

    5532questions

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

MySQLで外部結合で横に繋げていく事はできますでしょうか?

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 308

takamilk2

score 2

MySQLのsql文で教えていただきたいのですが、

テーブル1のidとテーブル2のidが同じものを
テーブル2のレコードごとに同じidにカラムを足していきたいのですが、
このような結果を出す事は可能でしょうか?
またできれば1回のクエリで実行できればと思います。

初心者で申し訳ございませんが。
どうしても解決する事ができなかったため
ご教授いただければと思います。

イメージ説明

miyaha様 >>

丁寧にご教授頂きありがとうございます。
現在簡単なアクセス解析を作っておりまして
ページの訪問者の情報をDBに書き込んでいました。

それを元にページをどのように遷移していったかを
簡単なアクセスフローをHTMLで作っておりまして。

セッションごとに観覧履歴をsqlでテーブルとして吐き出しその後、
javascriptで同じページのテーブルをソートし、縦に同じテーブルをつなぐ処理を行っていたのですが、
レコードが増えるにつれjavascriptではやはり重くタイムアウトしてしまうようになりまして。
このたびjavascriptの部分をsqlで代用できたらよいなと思い相談させていただきました。

イメージ説明

先ほどのものを書き換えると下記の様に観覧履歴をセッションごとに時系列に並べ
上下同じページ名がグルーピングされるように昇順に並び替える事が
sqlできればよいなと思っておりまして。
すみませんがご教授お願いいたします。
イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • miyahan

    2017/11/14 20:36

    これは「外部結合」とは言いません。また一般的にリレーショナルデーターベースで行う操作でもありません。このようにレコードを加工して何をしたいのか(理由・いきさつ)を書くとよりよいアドバイスがもらえると思います。

    キャンセル

回答 3

+2

初心者にはちょっと厳しいかと思いますが、先日質問があがった
結合したテーブルの取得結果が複数件存在した場合に1件として扱えますか。の回答を利用すれば可能です

 追記

前回提示したとおりSQLを以下組み立てればできそうですが・・・

  • 元データ作成

必ず順位付けができるようにidを振ってあります。
時系列で処理するなら更新日時などを利用してもよいでしょう。
ただし同値で同順位になるようだと問題です

create table tbl(id int unique,sess int,val varchar(10));
insert into tbl values
(1,1,'A'),
(2,1,'B'),
(3,2,'A'),
(4,2,'C'),
(5,2,'D'),
(6,3,'A'),
(7,3,'C'),
(8,3,'E'),
(9,3,'F'),
(10,3,'G'),
(11,4,'D'),
(12,5,'C'),
(13,5,'D');
  • 検索
select sess
,group_concat(case rank when 1 then val end) as val1
,group_concat(case rank when 2 then val end) as val2
,group_concat(case rank when 3 then val end) as val3
,group_concat(case rank when 4 then val end) as val4
,group_concat(case rank when 5 then val end) as val5
from(
select id,sess,val,(select count(*)+1 from tbl as t2 where t1.sess=t2.sess and t1.id>t2.id) as rank
from tbl t1
) as b
group by sess

上記をいちいちgroup_concatを書くのが面倒でしたら
参考につけたprocedureで処理します。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/14 21:44

    Orlofsky様にもこちら回答頂いたのですが、追加で補足画像をついかしたのですが、カラムごとソートをかけたいので1つのカラムに複数の値がまとまってしまうと厳しく。。

    キャンセル

  • 2017/11/14 22:01

    すみません。Orlofsky様と同じでこの頂いた内容で解決できそうです。
    おいそがしい中本当にありがとうございました!

    キャンセル

  • 2017/11/14 22:08

    解決したのでしたら問題ありませんが、一応追記しておきましたので
    さらっと読んでおいて下さい

    キャンセル

  • 2017/11/15 16:55

    丁寧にどうもありがとうございます。。
    わざわざわかり易く私の書いた内容を当て込んで頂きありがとうございます。
    こちらですごくわかり易くなりました。
    また今回の場合group_concatが変動しますのでこちらを参考にprocedureで対応したいと思います。

    キャンセル

checkベストアンサー

+1

GROUP_CONCAT を使う方法が参考になるでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/14 21:40

    そういった物があるのを知りませんでした。勉強になります。ただ私の場合、一つづつレコードに順番にソートをかけたいので1つのカラムにまとまってしまうと厳しいのです。

    キャンセル

  • 2017/11/14 21:59

    すみません。。まだteratailを使い始めたばかりで正しい回答いただいてたのに勘違いしてました。
    ありがとうございます!こちらでなんとか解決できそうです!
    大変助かりました。

    キャンセル

+1

追記を見ました。階層構造はMySQLなどのリレーショナルデータベースが苦手とするジャンルです。

幸い、必ず1つの子しか持たない(分岐を伴わない)データ構造なので、yambejp さんが回答されているようにプログラム側で配列等に入れて集計していくのが最もシンプルで確実だと思います。

その結果を json で渡して JavaScript で描写するなり、PHP で結果のHTMLを生成するなりすればよいと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/14 22:03

    改装構造は苦手なのですね。色々とご教授ありがとうございました。
    またsqlのあとの処理もご意見頂き誠にありがとうございました。
    なんとかおかげ様で解決できそうです。本当にありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    mysqlで特定の列の文字を小文字に置換したい

    id, english varchar(255) memo varchar(255) からなるテーブルがありデータが入っていますがenglishは大文字と小文字が混ざって

  • 解決済

    ACCESS クエリでの一部重複?の除外方法について

    前提・実現したいこと こんにちは、質問タイトルが適格でないかもしれませんが宜しくお願いいたします。 通販事業をしており、商品の仕入から販売までのデータベースをACCESSの

  • 解決済

    Monacaでtimepickerの実装

    前提・実現したいこと MonacaでiOS/Andriod両方に対応しているアプリケーションを開発していて、アラーム機能を実装しようと思い、Monacaでtimepickerのよ

  • 解決済

    MySQLのLEFT JOINとNOT EXISTSの違い

    データの検証をするためにSQLを書きましたが思った結果になりません。 table_aとtable_bを比較して、table_aだけに存在するデータを得るのが目的です。

  • 解決済

    mysqlのdate型をハイフンではなくスラッシュに変える

    前提・実現したいこと mysqlに保存したdate型はYYYY-MM-DDで出力されますが、 これをYYYY/MM/DDのようにハイフンではなくスラッシュ区切りで表示させたいと

  • 解決済

    atom自動補完やり方

    これのプログラミング版になります 今いろいろ調べているのですが、atom自動補完ができません。宜しくお願い致します。 リンク内容 autocomplete-p

  • 受付中

    ER図について

    つぶやきアプリを作っているのですが、 ER図を作るとする例えばどんなものがありますか?? サンプル程度でいいので教えていただきたいです

  • 解決済

    参照整合制約のテーブルを作成したい

    mysql で参照整合制約がやりたいのですが、ここでエラーが出てしまっています。 最終的には、主キー 外部キー 外部キー というテーブルを作成したいです。 発生している問題

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

  • MySQL

    5532questions

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