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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

1825閲覧

データベースのカラム値の利用方法教えてください。

koume

総合スコア458

MySQL

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/09/12 08:48

会員の検索をするプログラムを作ろうとしているのですが、Rails初心者でいろいろ調べても
よくわかりませんのでよろしくお願いします。

やりたいこと
新規に会員になった方の紹介者をある段階までさかのぼってデータベースに登録したいのです。
ネットで調べても参考書を読んでもそれに近い内容はあるのですが微妙に違い困っています。

Scaffoldingでテーブルを作成し(userテーブル)自分を紹介してくれた人のidを入力し登録してもらったあとで
そのテーブル内カラム値(自分を紹介してくれた人のid)を取り出しその値を別のテーブルのカラムに上書き
したいのですが方法を教えていただけませんでしょうか?
さらにその紹介してくれた人のuserテーブルのレコード(id)を検索しそのレコードの紹介者のカラム値(id)を
別のテーブルに上書きしたいと考えてはまっております。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

これはいわゆる階層モデルと呼ばれる処理で、気軽にやるにはちょっとめんどくさい処理です。
単純なデータの持ち方としては「隣接リストモデル」を利用し
自分の親だけ覚えておくようにします。
これを「入れ子集合モデル」や「経路列挙モデル」に
適宜変換するなどして集計や検索することになります。

興味とやる気があればこちらを参照ください

投稿2016/09/12 09:03

yambejp

総合スコア114829

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

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

koume

2016/09/12 09:36

さっそくの回答ありがとうございます。 隣接リストモデル、入れ子集合モデル、経路列挙モデル、どれも初耳です。勉強してみます。
guest

0

MySQL を使われるものとして回答します。

普通は会員テーブルに「紹介者の会員ID カラム」のみ準備して、必要なだけ以下の様なプログラムで 紹介者> 紹介者 ... を取得します。

ruby

1require 'mysql' 2 3設定.紹介者Max = 任意の数 4connection = Mysql::new("127.0.0.1", "mysql", "mysql ユーザのパスワード", "スキーマの名前") 5 6# 会員ID -> 紹介者 7 8紹介者 = [] 9 10statement = connection.prepare('SELECT * FROM `会員` WHERE `会員ID` = ?;') 11 12tuple = statement.execute( 会員ID ).fetch 13 14紹介者ID = tuple.紹介者ID 15 16while( 紹介者.length < 設定.紹介者Max ) 17 if 紹介者ID.nil? then 18 break 19 end 20 21 tuple = statement.execute(ID ).fetch 22 23 if ! tuple then 24 break 25 end 26 27 紹介者.push( tuple ) 28 紹介者ID = tuple.紹介者ID 29end 30 31statement.close 32 33connection.close

投稿2016/09/12 10:29

編集2016/09/12 10:46
AkiraPenguin

総合スコア51

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

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

koume

2016/09/12 11:01

回答ありがとうございます。初心者でよく理解できていませんが回答していただいたプログラムをみて勉強させていただきます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問