0

私は小さなコミュニティのためのソーシャルネットワークを構築しています。各ユーザーは、写真をアップロードしたり、ツイートを投稿したりして、他のユーザーと共有することができます。

投稿はツイートテーブルに保存されます

tweets : id , user_id , text , date

写真は写真テーブルにあります

pics : id , user_id , album_id , title(ie:pic.jpg) , text(description) , date

今、私はそれらすべてを彼の壁のユーザー投稿として表示したいと思います。これを行うための最良の方法がわかりません。

3番目のテーブルを追加して正規化を使用し、次のようなタイプのユーザーエントリを追跡できます。

user_entries: id , entry_type(tweet , pic ) , date

今私はすることができます:

$entries = $db->get_entries( $user_id );
foreach ( $entries as $ent ){

   if($ent->entry_type == 'tweet' )
    $db->get_tweet($ent->id);
    // show a tweet and for each one get it's comments

   if($ent->entry_type == 'pic' )
    $db->get_pic($ent->id);
    // show a pic and for each one get it's comments

}

しかし、それは、コードが遅くなり、データベース接続が多くなることを意味します。もちろん、各エントリのコメントを取得する必要があり、長期的には速度が低下します。

そのため、1つのクエリでこれらすべてを取得する方法を見つけたいと思っていました。わからない、多分2つのテーブル間でunoinを使用するか、データベース設計を変更するか?

4

2 に答える 2

1

posts次のような3番目のテーブルがあります。

post_id | user_id

各投稿/画像に一意のpost_idを指定し、この新しいテーブルからすべての投稿を選択します(これは、ユーザーと投稿の間の多対多の関係と呼ばれます)。postsテーブルをクエリするとJOIN、他のテーブルがすべての適切な情報を取得します。

于 2012-05-19T13:17:08.533 に答える
0

非常に大きなテーブルがある場合。picsテーブルを小さなテーブルに分割してから、PIC_IDを使用して、後でテーブルを結合したり、必要なものをフェッチしたりしてみませんか。私は速くなります

表1

pic_id user_id

table_2

pic_id album_id

table_3

pic_id title(ie:pic.jpg)

table_4

pic_id text(description)

table_5

pic_id日付

于 2012-05-19T13:22:33.047 に答える