我对SQLite
和SQL
都很陌生,我正在努力解决以下问题:
我的应用会显示社区成员列表。如果我点击一个成员,我可以看到成员发布的帖子列表。帖子是具有名称,时间和消息的对象。如何将其存储在SQLite
数据库中,以便我可以通过userid
查询数据库并获取特定用户的帖子列表。
我有一个包含这些列的用户表:
USER_ID | NAME
我有一个包含这些列的推文表:
USER_ID | NAME | TIME | MESSAGE
我的问题是:link
这两个表的最佳方法/结构是什么?我是否为每个用户创建一个新的推文表,或者我是否将所有推文存储在一个长表中,首先是用户1的推文,然后是用户2等?
我不一定要寻找代码转储,而是寻找逻辑的解释。
答案 0 :(得分:14)
已经给出并接受了答案,但我想补充一下。
您想要的是一个包含用户的表users
。在此表中,您可以存储用户信息(user_id
,name
)。
在您的Tweets
表格中,存储所有用户的所有推文。每行一条推文。我将tweet_id
用作PRIMARY KEY
表格Tweets
。
然后,您可以通过像Dave Swersky所说的那样JOIN
来“链接”代码中的两个。
例如:
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
是什么。据我所知,推文没有名称/主题(?)。您不需要在tweets
和users
表格中存储用户名。
对于快速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
答案 1 :(得分:11)
这是一个典型的“加入”场景,您可以在用户和帖子之间建立一对多的关系。
以下是一个显示所有用户及其帖子的查询示例:
SELECT u.User_ID, u.Name, p.Time, p.Message
FROM Users u INNER JOIN Posts p ON u.User_ID = p.User_ID
这将生成一个包含四列的结果集。每个“推文”将显示其相关的用户记录。 '你'。和'p。'语法是用于使查询更易于阅读的表别名。
答案 2 :(得分:6)
您需要有两张桌子:
1的用户
USER_ID | NAME
2的鸣叫强>
USER_ID |时间| MESSAGE
现在解释一下:
表1代表用户,有关于用户的所有数据,如姓名,电话,地址等。
表2适用于所有用户的所有推文,并且有一列连接用户和他的推文。 在表2中,USER_ID是外键,它指向users表中的一行。
要获取一个用户的所有推文,您可以编写下一个查询:
Select TWEETS.MESSAGE, TWEETS.TIME
from Users, TWEETS
where Users.USER_ID = TWEETS.USER_ID
and Users.NAME = "Pierre";