• ベストアンサー

テーブル作成について質問があります。

今perlでDBにデータを保存し表示する掲示板を作っています。 書き込みされるデータ(名前・タイトル・本文・URL)をまとめて管理したいです。 管理したい理由はそれぞれの書き込みに対してIDみたいなものを自動的に振り分けて、そのIDで書き込み(そのIDの行のデータ全て)を削除出来るようにしたいのです。 ID:1 名前:佐藤 タイトル:始めまして。 本文:よろしくお願いします。 URL:xxxxxxxxxxxx 等の書き込みがあった場合に、削除したいID(この場合は1)を削除の項目に入力して削除出来るようにしたいのです。 ですが、書き込む際に利用者にはIDを書かせません。書き込みされた時に自動的かつ1/2/3/4/…と順番に振り分けたいのですが、これはDBを作る上でどうにか設定できるのでしょうか?

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

  • ベストアンサー
  • meenie
  • ベストアンサー率44% (40/90)
回答No.3

INSERT文のフィールド名は設定していますでしょうか。 id以外の項目を列挙すれば問題なく挿入できると思うのですが。 INSERT INTO `tableName` (`name`, `title`, ・・・以下略) values ('佐藤', '始めまして。', ・・・以下略); 取得する場合はid指定で取れると思います。 SELECT * FROM `tableName` WHERE `id` = 1;

tamanele
質問者

お礼

ありがとうございます1これで試してみます!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

>AUTO_INCREMENTにはかならずデータを渡さなければいけない >(NULLは許可されない)となったんですが nullを挿入する指定をすると、MySQL側でnullを格納するのではなく、+1してくれます。 insert into 表名 values(null,'佐藤','はじめまして','よろしく~','xxx..x') でもいいし、 insert into 表名(名前,タイトル,本文,URL) values(null,'佐藤','はじめまして','よろしく~','xxx..x') でもいいです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

使っているDB、用途、重要性にもよりますが、 先の回答にもありましたがAUTO_INCREMENTが楽でいいのでは? ただし、DBがOracleであったり、データの重要性が高く 冗長化を考慮するとAUTO_INCREMENTは私個人としては使いにくい・・・ って感じですね。

tamanele
質問者

補足

重要性はそんなに多角ありません。 使っているのはMYSQLです。 IDのフィールドをAUTO_INCREMENTとして設定した場合、perlでデータを受け渡す際にIDのフィールドには何も渡さなくても良いのでしょうか? 以前に同じような事を試みた時に、AUTO_INCREMENTにはかならずデータを渡さなければいけない(NULLは許可されない)となったんですが…。

全文を見る
すると、全ての回答が全文表示されます。
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

IDフィールドをintなどの数値フィールドタイプにして、 auto_increment属性を与えれば、自動的に数値が与えられ ますけど。

tamanele
質問者

補足

その数値のフィールドは書き込まれたデータを受け渡す際に空白でも大丈夫なのですか? それともデータを受け渡す時にIDのフィールド自体を指定しないと言う事でしょうか??

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 最適なDB Table作成

    現在以下のシステムを作成しているのですが、データベース設計に悩んでいます。 システムはユーザーが自由に作成&カスタマイズできるアンケートです。 例えばデフォルトはアンケート項目が 名前 数字 年齢 数字 興味のある物 チェックボックス とします。 でユーザーはこのアンケート項目を自由にカスタマイズできます。 デフォルト時のDBでは userform ユーザーID | 変更日 | 項目 | 項目名 | 条件 | 掲載日 userid | 200812 | name/age/interestings/ | 名前/年齢/興味のある物 | num/num/cb/ | allrequired | 200901 と成っています。  ここでユーザーが名前と年齢の間にフリガナを追加した際、DBでは変更日と項目、項目名、条件が書き換えられます。 アンケートを表示すると、PHPで動作するスクリプトがユーザーのレコードを読み込み、各項目をHTMLに変換、表示します。 そしてデータを収集する方ですが、DB構成は以下になります。 ユーザID | データ入力日(int) | 結果(text) | IPアドレス データが入力されると datadb userid | 20081209 | 佐藤/25/computer | 123.123.123 となり、データ集計プログラムをブラウザで表示すると、SELECT * FROM datadb WHERE userid = "userID" と SELECT * FROM userform WHERE userid = "userID"を発行し、PHPでデータをソートし表示します。 しかし以上の構成だと、途中でアンケートの項目を追加&削除したり変更することはできず、使い勝手が悪くなります。 仮にuserformのカラムをユーザーアンケート項目の追加、削除のたびにAlterで追加、削除てしまう方法も頭に浮かびましたが、そうすると別のユーザーにもその追加したカラムを適用してしまうためNGです。 どのようにすればユーザーアビリティも保て、中規模なシステム利用でも耐えることが出来るできるDBを作成できるのでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • SQL:重複を削除した場合の別テーブルの更新

    下記のようなことを行いたいのですが、もう数十時間悩んでおり、このままだとクビになります。 以下のようなテーブルが2つあります ■テーブルA 顧客ID なまえ 内線 ―――――――― 001、 佐藤、 001 ※同じ(これだけ残す) 002、 鈴木、 002 003、 田中、 003  004、 佐藤、 001 ※同じ(削除) 005、 佐藤、 004 006、 鈴木、 005 007、 佐藤、 001 ※同じ(削除) ■テーブルB 伝票ID 顧客ID 購入物 001、 001、 ガム ※対応する顧客は残る 002、 003、 チョコレート 003、 004、 塩  ※対応する顧客が残らない 004、 006、 ガム 005、 002、 塩 006、 007、 塩  ※対応する顧客が残らない テーブルAの佐藤4人中3人は、名前も内線も同じなので 顧客IDは一番小さいものだけ残し、あとは同一とみなし重複行を削除します。 そうするとテーブルBの伝票IDの001、003、006の顧客IDは全部が佐藤だったのですが 重複を削除してしまったため、003と006に対応する顧客がテーブルAから消えてしまいます。 なので、テーブルAの重複を削除するときに、同時にテーブルBの顧客IDも 一緒に一番小さい顧客IDに更新したいのです。 どうか宜しくお願いいたします。

  • テーブル構成について

    Perl + PostgreSQL でWEBシステムを作成しております。 まず例を記載致します。 テーブル例: [ 顧客情報 ] 名前,携帯電話キャリア区分,情報A,情報B,・・・ 上記のようなテーブルが存在していたとします。 「携帯電話キャリア区分」のカラムには、'1'か'2'か'3'が入力されます。 1はDoCoMo、 2はKDDI、 3はVodafone と云う風に決めておきます。 以下質問 キャリア区分に1~3が存在し、数字がそれぞれのキャリア名と結びついています。この携帯キャリア管理をDB上に被参照テーブルを作成しそこで行うか、この程度の項目数とデータ数であれば、テキストデータとして作成し管理しておくか、どちらで行おうか非常に悩んでおります。 そこで皆さんのご意見を参考とさせて頂きたく投稿させて頂きました。 ちなみに私の考えたそれぞれのメリット・デメリットは以下の通りです。 ■DB上での管理 全データを一元的に管理できる 柔軟性が乏しい(仮に運用途中でテーブル項目が増えたりしたら面倒) ■テキストデータの管理 バックエンドとの通信がない為処理が早い DBとテキストでデータ管理が分かれる 柔軟性が高い(オープンソースなんで・・・) 以上です。 よろしくお願い致します。

  • 特定の文字を削除したい

    <元データ> 1955/03/08,東京太郎BD,東京 営業 1978/12/28,山田花子S,横浜 管理 1970/07/07,佐藤次郎KK,東京 管理 といったCSVデータから特定の文字(名前後のローマ字/1or2桁)をPerlを使用して削除する方法を教えて下さい。 <実行後> 1955/03/08,東京太郎,東京 営業 1978/12/28,山田花子,横浜 管理 1970/07/07,佐藤次郎,東京 管理 宜しくお願いします。

  • レコードを移動するには?

    ID 名前 1 佐藤 2 伊藤 3 田中 4 鈴木 テーブルにはこのような情報が入っていて,IDはオートナンバー型で、 ID順にデータを読み込んだりしています。 この時、4レコードの鈴木を1と2レコードの間に切り取り→挿入することはできないのでしょうか? エクセルと違い、アクセスの場合は、右クリック→切り取りをすると、レコードが削除されるようです。 ID 名前 1 佐藤 2 鈴木 3 伊藤 4 田中 このようにしたい場合は、手作業で行うしかないですか?

  • 質問の削除は

    質問の削除は何件ぐらいの要望が集まれば削除するのでしょうか。 違反項目に該当するものはどうして最初にカットしないのでしょうか。 単なる人手不足? IDは人が使っているものにどうして簡単に変えることが出来るのでしょうか。 私が登録する時は、めったにない名前を書いてもすべて既にあります。 で通らなかったのに、管理が変わったのでしょうか? ご存知の方、又はこう思うと言うご意見でもかまいません。 よろしくおねがいします。 でたらめな書き込みをしないためには、 1年ぐらいはIDを変えられないようにするべきではないでしょうか。

  • PostgreSQL 7.2.8 異なるデータベース間のテーブル

    こんにちは。かなり困っています、よろしくお願いします>< PostgreSQL 7.2.8 を使用しています。 一つのユーザーで、二つのデータベースがあります。 それぞれ同じカラムを持つ同じ名前のテーブルがあります。 中のデータは違います。 db1 - tableT db2 - tableT 条件を付けて、db1のtableTのデータを db2のtableTへコピーするにはどのような方法がありますか? 例えば select * from db1.tableT tbl1, db2.tableT tbl2 where tbl1.title = tbl2.title; のようにしてとりあえずselectで試してみましたがダメでした。 やはりスキーマとデータベースは違うんですね>< ドットが認識されませんでした。 どなたか解決法をご存知の方、よろしくお願いします。

  • 2つのテーブルでの集計2

    昨日解決したかと思ったのですが、また出来ないことが出てきたので 同じようなタイトルで再度質問に参りました。 以下のようなテーブルがあるとして、 ● T1 名前|A_id|B_id| AAAA|1111|----| BBBB|----|2222| CCCC|3333|4444| ● T2 id|A_id|金額 01|1111|2000 02|3333|1000 03|1111|4000 ● T3 id|B_id|金額 01|2222|2000 02|4444|4000 ● 抽出結果でやりたいこと →SUM(A_idの金額)とSUM(B_idの金額)を足した金額が5000以上のみ抽出 かつ、T2とT3のid(通し番号)はグループ化せずに個々で出す 名前|A_id|B_id|A金額|B金額|横の合計| AAAA|1111|----|6000 |-----|6000 idはT2:01/03 CCCC|3333|4444|1000 |4000 |5000 idはT2:02/T3:02 表の作成はOKなのですが、個々のデータのidがグループ化してしまって どのデータから参照しているのかわからない状態になってしまいます 抽出結果に応じたidのデータに出力された日付を書き込みたいのですが、 今の状態ですと1つ分にしか書き込みされません… 全く同じ条件下でT2、T3個々のデータのidを全件取り出すことは可能でしょうか??アドバイス宜しくお願いします。。。 MySQL クライアントのバージョン: 5.0.45

    • ベストアンサー
    • MySQL
  • CSVデータのダウンロード方法で悩んでいます。

    ID(自動)、名前、日付、・・・・・、元ID(通常は0)のような形のテーブルAが存在します。 一度登録したものに対して変更・取消が可能です。変更・取消を行うと元IDにどのIDに対して変更・取消が行われたのかわかるように 変更・取消元のIDが入るようになっています。 例)こんな感じです↓ ID(自動)、名前、日付、・・・・・、元ID(通常は0) 1、山田、12/01、・・・・・、0 2、鈴木、12/02、・・・・・、0 3、山田、12/05、・・・・・、1(ここで変更) 4、山田、12/10、・・・・・、3(ここで取消) 5、佐藤、12/15、・・・・・、0 6、鈴木、12/16、・・・・・、2(ここで変更) この時、取消されたデータは不要なので、データのダウンロード時には省きたいのですが、どのようにしたらいいのか分かりません。 上記例でいくと、ID:1、3、4は不要となるのでデータダウンロード時には、 ID(自動)、名前、日付、・・・・・、元ID(通常は0) 2、鈴木、12/02、・・・・・、0 5、佐藤、12/15、・・・・・、0 6、鈴木、12/16、・・・・・、2(ここで変更) だけになるようにしたいのです。 どなたかアドバイスお願いします。

  • CGI(perl)データベースを教えてください。

    http://www2.inforyoma.or.jp/~tokaji/cgitech/db.htm を見てperlで簡易データベースを作ることが可能ということを知ったのですが、いくつか質問があります。 お願い致します。 <状況> flashから送られてきた「ID」・「パスワード」・「その他のデータ」をサーバのperlデータベースで管理する。 (1)まず、本当にperlでデータベースは作れるのでしょうか? (2)access等の簡易ではないデータベースと比べると どんなリスクがあるのでしょうか? (3)メモ帳でデータの管理をすると思うのですが、セキュリティ面は、大丈夫でしょうか? (4)どのくらい(仮に1000~10000人)のアクセスに耐えられるのでしょうか? サーバにかかる負荷は、access等の簡易ではないデータベースと比べると、大きくなるのでしょうか? (5)Flashからのデータをperlを使い管理する時、 最善の方法があれば教えてください。 長くなりましたが、よろしくお願い致します。

    • ベストアンサー
    • Perl
このQ&Aのポイント
  • Excelの関数を使用して、FAX送付状の宛先を自動で判別する方法について教えてください。
  • 例えば、A1セルには法人名、A2セルには個人名を入力した場合、A3セルには「法人名 様」と表示されるようにしたいです。
  • ただ、現在の関数では思った結果が得られておらず、どの組み合わせでもちぐはぐな結果になってしまいます。上手くいかない原因や解決方法を教えてください。
回答を見る