• 締切済み

PHPデータベース・テーブルの移行

PHPとMySQLを使ってサイト構築しています。 MySQLのデータベース「group_color」にはテーブル「pink」とテーブル「blue」があります。 サイトでログインしている会員ユーザーの情報が「pink」に入っていてユーザーが ”ブルーグループに変更する”というボタンを押すと、テーブルpinkに入っている情報がテーブルblueに移行するようにしたいのですが、PHPの表記はどのようになりますか? 「ログインしている会員の情報」を移行させたいです。 テーブルのフィールドは ・id ・name ・birthday となっています。 よろしくお願いいたします。

  • PHP
  • 回答数4
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

ちなみにidが主キーだとして、pinkとblueが別管理しているとなると 普通の管理をしていると競合してしまいます たとえばpinkのid=1が田中さんだとして、blueのid=1にすでに鈴木さんがいると 田中さんはpinkからblueに移動できません たとえば別管理テーブルをつかうとか、移動の際に一定の数を足し引きするなど 工夫をすれば競合は防げますが、煩雑で堅牢さを損なうためあまりお勧めできません。 最初から1つのテーブルで管理していれば 田中さんのidと鈴木さんのidは競合することはなく、 グループをわけるフィールドだけみて、pink組とblue組をわけることができます

回答No.3

質問者は正規化について勉強する必要がある。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>全く違うグループとして扱いたいので一つのテーブルでは管理できません。 >二つに分けてユーザーの解析などを行いたいのです。 「まったく違うグループ」というだけで、テーブル定義は基本的に同じなのですよね。であれば、グループの列を作って使う側で選別する方が楽ではないかというのがANo.1だと思います。解析などはどうとでも書けます。 ましてグループの変更(pink→blieの移行など)が発生するという状況であれば、なおさらですね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

なんのためにテーブルをわけているのでしょうか? pinkとblueを択一するフィールドを一個用意しておけば1テーブルで管理できますが

mi09251
質問者

補足

回答ありがとうございます!! 全く違うグループとして扱いたいので一つのテーブルでは管理できません。 二つに分けてユーザーの解析などを行いたいのです。

関連するQ&A

  • phpとデータベース

    毎回お世話になっております。あの今phpmy-adminで作成したデータベースにphpでつなげました。ユーザがウェブページ上で入力したものを保存してテーブルのそれぞれのレコードを表示させました。そこのページに”削除”というボタンを押すとテーブルからそのレコードだけを消せるようにしたいのですがどのようにすれば良いでしょうか?下のようなものを考えたのですが失敗してテーブルに含まれる全てのレコードを間違って消してしまいました。すみませんがよろしくお願いします。 2つテーブルがあり、entries とcommentsテーブルのフィールドはこのようになっております。 entries entry_id title entry entered_timestamp comments comment_id commentor_name commenter_email comment timestamp <html> <body> <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post"> <?php require_once("connect.php"); $booDelete = 0; $dbRecords = mysql_query("SELECT* FROM entries", $dbLocalhost) or die("Problem reading table: " .mysql_error()); while ($arrRecords = mysql_fetch_row($dbRecords)) { echo "<p>" .$arrRecords[0] ." "; echo $arrRecords[1] . ""; echo $arrRecords[2] . ""; echo $arrRecords[3] ."</p>"; echo "<INPUT type ='submit' value ='Delete' name='submit'>"; } if (isset($_POST["submit"])) { $dbRecordDelete = mysql_query("DELETE FROM entries WHERE entry_id = entry_id", $dbLocalhost); } ?> <form> </body> </html>

    • ベストアンサー
    • PHP
  • PDOで複数のテーブルを扱いたい

    PDOで複数のテーブルを扱いたい 現在ドットインストールというサイトで勉強しております。 http://dotinstall.com/lessons/sns_php_v2 このユーザー管理のレッスンで自分なりに応用してみようと戦っております。 これでは、ログインを行い登録したユーザーのプロフィールを表示するという内容なのですが、管理人とユーザーという風に分けてadminのテーブルに管理者を作成し登録し、登録された会員は自分のプロフィールを表示できるという流れにしたいと思っております。 レッスン通りでは問題なく出来ました。 そこで次にテーブルを分けて表示することにチャレンジしております。 users(会員テーブル)とは別にaddress(住所テーブル)を作成し会員テーブルと同じようにidカラムと住所を入れるtext項目をデータベースに作成しチャレンジしました。 サイト通りプロフィールを表示させる方法でやればこちらもテーブルを読み込ませることはできるのですが、URLの数値を変えれば当然他の人の情報も見えてしまいます。 $meというセッションで取得したいのですがusersの情報はログイン時にセッションとして受け取っているので#meで受け取りができるのですがaddressのテーブル情報にもこのセッション($me)で表示させるにはどのようにすればよいのでしょうか? やりたいことはログインした会員の情報のみ(他人のデータをみれない)表示させたい。 データベースのほかのテーブルもusersのセッションで共有したいということです。 わかりにくい説明で申し訳ございませんが、お助けいただけませんでしょうか。

    • ベストアンサー
    • PHP
  • レンタルサーバー&PHP&MySQLの環境で会員限定のデータベースを作

    レンタルサーバー&PHP&MySQLの環境で会員限定のデータベースを作成中です。 ログイン・ログアウトの処理を作成しているのですけど、いくつか質問させてください。 色々なサイトを巡り自分が解釈したログインの方法を書きます。 1.「会員登録画面」から会員情報を登録。(会員情報をMySQLに保存) 2.「ログイン画面」からフォーム(ID・PASS)を入力しボタンを押して認証。 3.入力されたデータを元にMySQLに問い合わせ会員情報の有無・情報の一致を判断 (情報がない場合はログイン画面へ) 4.セッションにID・PASSを保存。クッキーにセッションIDを保存。 5.会員限定ページに移動。セッションに保存してあるID・PASSを元にMySQLに問い合わせ一致するかどうかを判断。(していなければログイン画面へ) 6.セッションIDを更新する。以後ページを移動する度に一致しているかどうかを確認する。 このような感じになります。 ログアウトはセッション・クッキーを削除すればいいかなと思っています。 上記のような流れでいいのでしょうか。 いまいちセッションやクッキーに保存する内容をどうすればいいのか分かってない状態です。 又セキュリティ的にはどうでしょうか。データベースの改ざんや破壊されたら困るのである程度対策されたものを作成したいです。 ログイン時に自動ログインの有無のチェックボックスを設置してチェックされていたら2週間程度自動でログインされるようにもしてみたいです。 チェックされていたら自動ログインのkeyをランダム値で作成しクッキーとMySQLの会員情報に保存する。 ログインする度にkeyを更新する。(ページに移動する時も) ログアウトしたらkeyを削除する。 http://blog.ohgaki.net/espcs_if_a_fa_ia_a_pa_e_oa_a_sa_da_ca_sa ↑ここのサイトを見ました。 MySQLの会員管理なのですけど、MySQL専用のユーザー登録?(権限とか)を会員毎に登録していく方がいいのでしょうか。 PHPやMySQLは最近勉強し始めたので解り易く教えて頂ければ嬉しいです。 ソースなども添えて頂けるとありがたいです。 良い回答お待ちしています。

    • 締切済み
    • PHP
  • PHP phpMyAdmin

    hetemlのmysqlを利用しているのですが phpからmysqlへの格納が上手くいきません。 ■phpソース <?php $link = mysql_connect('サーバー名','ユーザー名','パスワード'); mysql_select_db('データベース名'); mysql_query("INSERT INTO myname VALUES ('test')"); echo mysql_errno($link); echo mysql_error($link); ?> ■phpMyAdmin テーブル myname を作成済 phpはエラーを出していないのですが テーブル myname のフィールドに test が格納されません。(変化ありません)

    • 締切済み
    • PHP
  • 会員関連テーブルの構成について

    MySQLとPHPでデータベースを勉強している初心者です。会員関連のテーブルについて下記のような構成を考えています。 Table A (会員ログイン用) - id  - ユーザー名 - パスワード Table B (会員プロファイル) - id - item 1 - item 2 - item 3   ・   ・ - 登録日 - 退会日 idを主キーにしてTable AとTable Bを関連付けするつもりですが、何らかの原因で使っている途中でidの関連付けがうまくいかなくなることなどあるのでしょうか? そのような場合、idにずれが生じても見つけられないのではなどと考えてしまいます。Table Bにidとユーザー名を載せたり、いっそ一つのテーブルで管理するほうが確実でしょうか。通常はどのようにしていますか?  Table Bは現会員と退会者を一つのテーブルで管理し、現会員のプロファイルの一部を公開します。退会者のプロファイルは使わないのですが、新規登録者とユーザー名がかぶらないようになど保管の必要も感じます。退会者の情報の取り扱いについてもアドバイスいただければと思います。

    • ベストアンサー
    • MySQL
  • phpでログイン時のIDチェック

    phpでIDとパスワードを入力してもらいそれをチェックしてログインするシステムを作っています。 普通にログインはできるのですがIDがsから始まりその後に数字が7桁来れば会員専用のメイン画面に移行し、それ以外のIDであれば普通のメイン画面に移行するプログラムを書きたいです。 例)IDがs1234567であれば会員用の画面、それ以外s1234,1234567,d1234567などのIDであれば違う画面に移行したいです。 自分が書いたコードはこのようになっておりこちらをどのように改良していけばこのようなプログラムが書けるか知りたいです。 どなたかご教授お願いします。 <?php require('dbconnect.php'); session_start(); if (!empty($_POST)) { // ログインの処理 if ($_POST['name'] != '' && $_POST['password'] != '') { $sql = sprintf('SELECT * FROM members WHERE name="%s" AND password="%s"', mysql_real_escape_string($_POST['name']), sha1(mysql_real_escape_string($_POST['password'])) ); $record = mysql_query($sql) or die(mysql_error()); if ($table = mysql_fetch_assoc($record)) { // ログイン成功 $_SESSION['id'] = $table['id']; $_SESSION['time'] = time(); header('Location: group.php'); exit(); } else { $error['login'] = 'failed'; } } else { $error['login'] = 'blank'; } } ?>

    • ベストアンサー
    • PHP
  • 【PHP + MySQL】ログインの

    ただいまPHP + MySQLにて、会員ログインシステムを導入した会員サイトを運営しておりますが、ログイン時にまったく別のユーザーでログインしてしまうという現象がおきて困っております。 たとえば、Aというユーザーが自分のIDとパスワードを使ってログインすると、ごく稀にBというユーザーでログインされてしまうということです。何かの間違いかと思い、会員データの編集画面を表示してもBの会員情報が表示されてしまい、ログアウトするまで、Bというユーザーでログインされているという状況です。 ID、パスワードの重複かと思いそちらもしらべましたが、 AはID、パスワードともに数字のみ BはIDが英数字 パスワードが数字 になっており、重複や入力ミスではないようです。 ちなみにWORDPRESSを用いてサイト構築を行っています。 ログインの処理自体はWordpressnのプラグインなどは用いていません。 一度キャッシュを制御するプラグインを用いて、ログインした状態のページをキャッシュしてしまう事はありましたが、そちらは今回とは関係ないのではないかと思っております。 また、現在そのプラグインは使用しておりません。 ログイン処理などを何度も見直しましたが、 間違ってログインされるような事は起こりえないと思うのですが、 何かサーバーの問題などでこのような事は起こるのでしょうか? 大変困っておりまして、お答えいただけるととてもありがたいです

    • ベストアンサー
    • PHP
  • データベース設計

    mysqlを使ってPCのログイン履歴を作りたいと思っています。 インターフェースはpukiwikiを使ってphpでmysqlをたたく予定です。 ユーザには入力フォームが用意されており、どのPCを使うかの選択と、ユーザ名の入力をします。 さらに、PC-Aにログインしているユーザをpukiwikiのページに表示したり、 使い終わった後はボタンを押すなどして、ユーザ情報を削除できるようにする予定です。 ↓mysql上ではこのように登録されている予定 |PC名|ログイン時間|ユーザ名| |PC-A|2011-0515-11:20|goo太郎 |PC-A|2011-0515-11:20|goo花子 |PC-B|2011-0520-11:20|goo次郎 |PC-C|2011-0501-11:20|goo史郎 phpとmysqlの連携は書籍が多くありそうなので、そちらは問題ない気もしますが。 mysql(データベース)を扱ううえで、正規化(?)が良くわかっていません。 PC-Aだけの情報を取り出してくるときに必ず必要になってくると思うのですが、 正規化はmysqlが自動的にやってくれるものなのでしょうか? ググってみても正規化のみの解説が多く、どうやって連携しているのかわかりません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHPでMySQLテーブルロック一覧取得

    PHPでMySQLテーブルロックされている一覧を取得したいですがどのようにすれば良いかご教授願います。 Web検索で調べるとロック状態はmysql_list_processesや、show processlistでも試してみましたが、思うような結果は得られませんでした。正常には動作していますが、欲しいデータが取り出せないですす。。。 単純に、現在ロックしているテーブル名(レコードロックは不要です。)を一覧で出力させることはできないのでしょうか? PHPから実施できるやり方をご教授頂けると幸いです。 -------Test Program()--------- <?php $link = mysql_connect('localhost', 'login_id', 'login_pass'); mysql_select_db('db_name'); mysql_query('LOCK TABLES table1 WRITE'); mysql_query('INSERT INTO table1 SET field1 = "test", field2 = "1"'); //$result = mysql_list_processes($link); 以下のSQL文とも入れ替えて試しました。 $result = mysql_query('show processlist'); while ($row = mysql_fetch_assoc($result)){ printf("%s %s %s %s %s %s %s %s\n", $row["Id"], $row["User"], $row["Host"], $row["db"], $row["Command"], $row["Time"] , $row["State"], $row["Info"]); } mysql_free_result($result); mysql_query('UNLOCK TABLES'); ?>

    • ベストアンサー
    • MySQL
  • ファイルメーカー8 データ加工後、別テーブルのフィールドへ移行

    こんにちは!! スクリプトにより、 フィールドのデータを、別テーブルのフィールドへ、 加工してから移行する時、どのようにやっていますか? たとえば、 テーブル1、テーブル2とあります。 テーブル1にはIDフィールド、テーブル2にはお客様番号フィールド。 移行したいレコードを、チェックボックスにより選択させ、 スクリプトを実行したとき、 選択されたレコードに対し テーブル1のIDフィールドを元に、 "hoge"を文頭に追加してから、テーブル2のお客様番号フィールドに 入力。 1レコード終わったら、次のレコード。 試しに1つ作ってみました。 移行元フィールドのデータをコピーし、移行先フィールドに移動、 貼り付け。 まだ、複数レコードがあっても、1フィールドだけなので 大丈夫ですが、 こういう処理をしたいフィールドは30以上あります。 もっと良いスクリプトの書き方は、ないでしょうか? なぜこのような事がしたいかと言いますと、 多店舗あるネットショップの顧客情報などを管理したいと思ってます。 それぞれのネットショップでは、顧客情報や商品情報などを 独自のフィールドでCSVとして吐き出します。 各店舗用テーブルへCSVを取り込み、 それぞれのスクリプトにより、 加工しながら、一括管理テーブルへと移行させたいのです。 説明が下手で申し訳ありませんが、何卒よろしくお願いいたします。

専門家に質問してみよう