• ベストアンサー

MySQLテーブルの上位に挿入

MySQLのデータベースにPHPから、insertでテーブルに一行挿入したいのですが、テーブルの最後尾や空いた行に挿入するのではなく、最上位に挿入することは可能でしょうか? 1 a 2 b 3 c ↓ 1 d 2 a 3 b 4 c どなたかお分かりになりましたら、 ご回答よろしくお願い致します。

noname#117855
noname#117855
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • takapiii
  • ベストアンサー率55% (944/1707)
回答No.2

基本的な所が間違っていると思いますが、テーブル内のレコードの順位は本来存在しません。レコードがシーケンシャルな物になってしまったら、リレーショナルデータベースの意味がありませんから。 ただ、内部的には、例えばOracleなどではrowidというシーケンスなIDで順位を管理していたりしますが、その順位はユーザ側で変更するものではありません。 MySQLにも同様の仕組み(単に時系列かもしれませんが)があると思いますが、そもそも上位に入れるというためには使用できません。 (トリッキーな方法があるにしても、そもそもそれは設計思想が間違っていると思います。) 順位付に関しては、データベースの論理設計時に開発者側で行うものです。 例えば各レコードに自己管理できるフィールドを設け、一意なIDを採番して挿入しておくという事です。そのIDを挿入しておけば、取得時にORDER BYで指定し、求める順位での取得が可能になります。 貴方のサンプルで言うところの、1,2,3という数値がそれに当たります。その数値を入れるフィールドを作り、順番を変えたい場合は、その数値をプログラム側で入れ変えてあげるという事です。

noname#117855
質問者

お礼

ご回答ありがとうございます。 確かに、リレーショナルデータベースの理解が足りませんでした。 他の箇所でも、ただエクセルのように使っていたところがありそうです。 今回はIDのフィールドを追加して対応します。 一度、リレーショナルデータベースとは何か、勉強して構築を考えていきます。 ありがとうございました。

その他の回答 (1)

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

おそらくRDBの基本がわかっていないのだと思いますが・・・ データベースにおいて格納順番というのは表示上まったく無意味です。 たまたま思った順番に表示されたとしてもそれは偶然です。 きちんとやるためには明示的にソートする必要があります。 今回の場合、挿入は順番を気にせずにおこない、 表示するときに適当なORDER BY処理をいれればよいでしょう

noname#117855
質問者

お礼

ご回答ありがとうございます。 RDBの基本、たしかに理解しておりませんでした。 今回は、アドバイスの通り、表示の際に、IDを整列キーとしてソート致します。 また、RDBについて、理解して今後構築を進めようと思います。 ありがとうございました。

関連するQ&A

  • insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。

    XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLでテーブルの完全同期

    MySQLでテーブルの完全同期を行いたいです。 例えばAテーブルをUpdateしたらリアルタイムでBテーブルもUpdate、同様にInsert、Delete。 Aテーブルに1000レコードはいっていて、Bテーブルが0件の場合、自動的に1000件Bテーブルに取り込む。 このようなことを実現することは可能でしょうか

    • ベストアンサー
    • MySQL
  • mysqlでのテーブルについて

    現在PHP+MYSQLでBBSを作っています。 サイトの構成上、複数のBBSを設置しているのですが、 BBS一つに対してLOGテーブルを一つ作っています。 テーブル数が非常に多くなり不安になっています。 (一つのトピックに対して一つテーブルが生成されます) データーベースを構築するのは初めてで戸惑っています。 MYSQLでテーブルが膨大になるのは問題があるのでしょうか? 一つのテーブルにレコードを格納していったほうがいいのでしょうか? 又、テーブル数に適正な数、上限などもあったりするのでしょうか? ご存知の方がいらしゃいましたらご教授お願い致します。

    • 締切済み
    • PHP
  • 2つのテーブルを結合する際にIDを割り当てたい

    PHPでmySQLを作成しています。 現在学習中なのですが、自己解決できない問題が発生したのでどうかお知恵をお貸しください。 --- 同じデータベースにTableAとTableBがあります。 中身は下記のようだとします。 TableA      |  TableB id  name time | name time :   :   :  |  C1   D2 101 A1  B1  |  C2   D2    102 A2  B2  |   :    : 103 A3  B3  |  C20  C20 --- テーブルAのカラムid、name、timeの3カラム、テーブルBはname、timeの2カラムです。 これを --- TableA        TableB id  name time  name time :   :   : 101 A1  B1 102 A2  B2 103 A3  B3 104 C1  D1 105 C2  D2 :   :   : 123 C20  D20 --- とするような方法を教えてください。(TableBはレコードなし) テーブルの結合ではIDが割り当てられず、上手な方法が思いつきません。 どうかご教示のほど、よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Web上(php)からmysqlにデータを挿入する

    授業評価アンケートのデータ収集システムを開発しています。 年度(セレクトボックス)[nendo]・学年(セレクトボックス)[gakunen]・クラス(セレクトボックス)[class]・科目名(テキストボックス)[kamokumei]・科目コード(テキストボックス)[kamokucode]・分類(セレクトボックス)[kind]・履歴者数(テキストボックス)[people] について、POST?hidden?でデータをページをまたいで持っていきます。 最終的に、アンケートの評価として、設問1~14のそれぞれについてA~F評価の人数を入力します。 表形式にしており、 設問1のA評価については、name="1A" 設問2のB評価については、name="2B" のようにしています。 そして、 「登録ボタン」 を押すと、 年度・学年・ ・・・ ・履歴者数 及び 設問1~14のそれぞれについてA~F評価の人数 をデータベースに挿入したいのですがわかりません。 データベースの構造は、 データベース名:student テーブル名:data field: nendo gakunen class kamokumei kamokucode kind people 1A 1B ・ ・ ・ 31F のようになっています。 今、挿入しようとしているアンケートについては、設問数は14です。 if文で、「分類」の選択(4つ)に応じて、設問数が変えたいため、31Fまでフィールドを用意しています。 今、挿入しようとしているものは年度や学年や・・・と、設問1~14のそれぞれについてA~F評価の人数ですが、フィールドが・・・31Fまであっても問題ないのでしょうか? <?php mysql_connect("localhost", "aiueo","##aiueo"); //データベースへ接続 mysql_select_db("aiueo"); //データベースを選択 $14F = $_POST["14F"]; $14E = $_POST["14E"]; $14D = $_POST["14D"]; ・ ・ ・ $people = $_POST["people"]; $kind = $_POST["kind"]; $kamokucode = $_POST["kamokucode"]; $kamokumei = $_POST["kamokumei"]; $class = $_POST["class"]; $gakunen = $_POST["gakunen"]; $nendo = $_POST["nendo"]; $sql = 'INSERT INTO `data` (`nendo`, `gakunen`, `class`, `kamokumei`, `kamokucode`, `kind`, `people`, `1A`, `1B`, `1C`, `1D`, `1E`, `1F`,・・・) VALUES     (\'\', \''.$nendo.\''.$gakunen.'\', \''.$class.'\', \''.$kamokumei.'\', \''.$kamokucode.'\',\''.$kind.', \',\''.$people.'\', \''.$1A.'\', \''.$1B.'\', \''.$1C.'\', \''.$1D.'\', \''.$1E.'\', \''.$1F.'\',・・・) mysql_query( $sql ); ?> のようにしています。 どなたか教えてください!!!

    • ベストアンサー
    • PHP
  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • PHPのforeachでMysqlにINSERT

    PHPのforeach文を使いMysqlにデータをINSERTしたいです。 配列$resultは以下のような連想配列になっています。 Array ( [0] => Array ( [A] => 1 [B] => 2 [C] => 3 [D] => 4 [E] => 5 ) [1] => Array ( [A] => 2 [B] => 4 [C] => 6 [D] => 8 [E] => 10 ) ) 上記の連想配列をforeach()文で以下の処理をします。 foreach ($result as $key => $value) { /** * データベースへの追加(新規追加時だけ実行。コメント忘れずに) */ $sql = $pdo->prepare('INSERT INTO sample(a, b, c, d, e) VALUES(:a, :b, :c, :d, :e)'); $sql->execute(array(':a' => $value[A], ':b' => $value[B], ':c' => $value[C], ':d' => $value[D], ':e' => $value[E])); } その後データベースでselect * from test;とすると1行目のデータしか格納されていません。原因が不明です。 print すると期待する配列要素が表示されますので配列のデータ配置不備ではありません。 アドバイス頂きたくお願い申し上げます。

    • ベストアンサー
    • PHP
  • MySQL 複数テーブルのフィールドにUPDATE

    よろしくお願いします。 PHP5、MySQL5、 PEAR DB、Smarty にて開発しております。 標題にもありますように、LEFT JOINを使ってUPDATEできる方法を探しております。 ●Aテーブル(親) id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 ●Bテーブル id | del_flag ----------------- 1 | 0 3 | 0 4 | 0 ●Cテーブル id | del_flag ----------------- 1 | 0 2 | 0 3 | 0 4 | 0 上記のような3つ、またはもしくはそれ以上テーブルがあったとします。 そこで、 Aテーブルの id 2 のdel_flagを1 とアップデートしたときに、 同時に全てのB、Cのテーブルの id 2 のdel_flagも 1 としたく思います。 Bテーブルには、id 2 が存在しないため、結果的にはCテーブルだけが更新されますが、 A、B,Cともに同一のid値 がある場合も考慮して、 アップデートしたいと思います。 そこで、PHP内で、一つ一つのテーブルを地道にアップデートすることは可能だとおもいますが、 一度のSQLでdel_flagの値を1とできる方法はございませんでしょうか? お手数ですが、 具体的なクエリを書いていただけると、大変助かります。 いろいろ調べましたが、なかなか上手くいかず・・・・。 よろしくお願いいいたします。  

    • ベストアンサー
    • MySQL
  • mysql_queryは最大いくつまで登録できるのでしょうか。

    いつもお世話になっております。 またまた詰まってしまいました。 mysql_query関数で、30程度のデータをひとつのレコードとしてデータベースに登録しようとしているのですが、どうしても登録に失敗してしまいます。 データベース、テーブルはphpMyAdminで作成しました。 id(auto_increment:主キー),a(varchar(20)),b(aと同様),c・・・,z(varchar(20))とします。 $sql="INSERT INTO table(a,b,・・・z) VALUES('$a','$b',・・・'$z'); mysql_query($sql,$conn); と、しています。$connには問題ありません。一応、すべて文字列を登録しようとしています。(数字もありますが、文字列としています) ためしに簡単なデータベース、テーブルを作成し、実行してみるとうまくいきました。 何が悪いのでしょうか・・・(変な質問になってしまいまして、すみません。)

    • ベストアンサー
    • PHP
  • mysqlのalter table中のロックについてです。

    mysqlのalter table中のロックについてです。 下記のように、alterでテーブルを再構築中に同じテーブルにinsertが実行された場合、 接続Bのinsertはブロックされるかと思うのですが、テーブルが大きくalterに時間がかかる場合、 タイムアウトなどは発生するのでしょうか。 またもし発生する場合、タイムアウト値の設定などの確認方法はあるのでしょうか。 1.接続A  alter table table1 add columnB int(11) ; 2.接続B(接続Aのalter実行中)  insert into table1(columnA) values('aaa');

    • ベストアンサー
    • MySQL