11

私はまったく新しい人でSQLiteありSQL、次のことに取り組む方法に苦労しています。

私のアプリはコミュニティメンバーのリストを表示します。メンバーをクリックすると、メンバーの投稿一覧が表示されます。投稿は、名前、時間、メッセージを持つオブジェクトです。これをデータベースに保存して、特定のユーザーの投稿のリストを取得しSQLiteてデータベースにクエリを実行するにはどうすればよいですか。userid

次の列を持つUsersテーブルがあります。

USER_ID | NAME

これらの列を含むツイートテーブルがあります。

USER_ID | NAME | TIME | MESSAGE

link私の質問は次のとおりです:これらの2つのテーブルへの最良のアプローチ/構造は何ですか?すべてのユーザーに対して新しいツイートテーブルを作成しますか、それともすべてのツイートを1つの長いテーブルに保存し、最初にユーザー1のツイート、次にユーザー2のツイートなどを含めますか?

私は必ずしもコードダンプを探しているのではなく、ロジックの説明を探しています。

4

3 に答える 3

14

すでに回答が出て受け入れられていますが、これを付け加えたいと思います。

必要なのは、ユーザーを含む1つのテーブルですusers。このテーブルには、ユーザー情報(user_idname)が格納されます。

Tweetsテーブルに、すべてのユーザーのすべてのツイートを保存します。行ごとに1つのツイート。テーブルはそのまま使っtweet_idています。PRIMARY KEYTweets

JOIN次に、 Dave Swerskyが言ったように、コードで2つを「リンク」できます。

例えば:

Users
--------------------------
user_id   |   user_name
--------------------------
   123    |    'Terry'
   34     |    'Pierre'

Tweets
-----------------------------------------------------------------------
tweet_id |   user_id   |  time      |         message     
-----------------------------------------------------------------------
   0     |    123      | 135646     |  'This is a tweet'
   1     |    123      | 132646     |  'This is another tweet by Terry'
   2     |    34       | 352646     |  'Pierre\'s tweet'

nameあなたのTweetsテーブルで何のためにあるのかわかりません。私の知る限り、ツイートには名前/件名(?)がありません。とテーブルの両方にユーザー名を格納する必要はありません。tweetsusers

簡単なSQLFiddleについては、こちらにアクセスしてください:http ://www.sqlfiddle.com/#!2/43492/1/0

加入

SELECT u.user_id, u.name, t.time, t.message, t.time 
FROM my_users u
INNER JOIN tweets t ON u.user_id = t.user_id
于 2012-10-10T14:32:03.510 に答える
11

これは、ユーザーと投稿の間に1対多の関係がある典型的な「JOIN」シナリオです。

これは、すべてのユーザーとその投稿を表示するクエリの例です。

SELECT u.User_ID, u.Name, p.Time, p.Message
FROM Users u INNER JOIN Posts p ON u.User_ID = p.User_ID

これにより、4列の結果セットが生成されます。各「Tweet」は、関連するユーザーレコードとともに表示されます。'u。' および「p。」構文は、クエリを読みやすくするために使用されるテーブルエイリアスです。

于 2012-10-10T14:02:25.397 に答える
6

2つのテーブルが必要です。

1.ユーザー

USER_ID | 名前

2.TWEETS _

USER_ID | 時間| メッセージ

今説明のために:

表1はユーザーを表しており、名前、電話番号、住所など、ユーザーに関するすべてのデータがあります。

表2は、すべてのユーザーのすべてのツイートを対象としており、ユーザーとそのツイートを結ぶ列があります。表2では、USER_IDは外部キーであり、usersテーブルの正確に1つの行を指します。

1人のユーザーのすべてのツイートを取得するには、次のクエリを記述します。

Select TWEETS.MESSAGE, TWEETS.TIME
from Users, TWEETS
where Users.USER_ID = TWEETS.USER_ID
and Users.NAME = "Pierre";
于 2012-10-10T14:06:33.720 に答える