2016-05-21 6 views
0

例としてStack Overflowを取りたいと思っています。今、質問が投稿され、データベースに次のものを保存するとしましょう。MySQLテーブルへの回答の保存方法

question_ID question_title question_body question_asker question_date

しかし、左の2つのこと、コメントと回答があります。だから私の質問は、 "私はどのようにデータベースに保存するのですか?"私は、5つの、おそらくは10の記事のような回答がちょうど1つのセルに格納されているとは思わない。

+0

Stack Exchangeのスキーマの詳細については、http://meta.stackexchange.com/questions/2677/database-schema-documentation-for-the-public-data-dump-and-sedeを参照してください。 – Mureinik

答えて

1

答えとcommmentsがそうのように、別のテーブルに格納されます。

データベース

質問

question_ID question_title question_body question_asker question_date

answer_ID answer_title answer_body answer_asker answer_date question_ID

に答えます

ここコメント

comment_ID comment_title comment_body comment_asker comment_date answer_ID

INNER JOINを使用してデータをフェッチするPHPコードの例である:

PHP

$dbh = new PDO('mysql:host=localhost;dbname=stackoverflow', $user, $pass); 
$query = 'SELECT * from questions INNER JOIN answers ON answers.question_ID = question_ID INNER JOIN comments on comments.comment_ID = answer_ID'; 
foreach($dbh->query($query) as $row) { 
    print_r($row); 
} 

stackoverflowのデータベースの完全なスキーマ:Database schema

0

関係とデータベース設計についてお読みください。

たとえば、データベースはコメントと回答のための追加テーブルを格納する必要があります。

各テーブルには、対応する質問のキーを格納するquestion_idなどの追加の列が必要です。

+0

また、「固定」できないと思う人もいます。途中からポスト/質問を削除すると、例えば26を削除すると25,27となります。それが起これば、大量のディスオーダーが発生します。 id列やその他のソリューションを自動オーダーする方法はありますか? –

+1

あなたの場合、このID 26が削除される場合は、次の番号をすべてシフトする必要がありますか?いいえ、私たちはまだデータを使用できます。並べ替えの結果は同じになります。 IDは単なる識別フィールドであり、連続する必要はありません。 DBによっては、次の値を生成するメカニズムが異なります。mysqlとsql servrerは特殊な列型を使用し、oraclはシーケンスを使用します。 – mjpolak

関連する問題