Php 按用户列出的内容:两个表的列具有相同的名称或联接?

Php 按用户列出的内容:两个表的列具有相同的名称或联接?,php,mysql,database-design,join,Php,Mysql,Database Design,Join,标题几乎说明了一切。我有用户发布内容,我想将用户表中的用户ID附加到帖子中。我应该在posts表中添加userid列,我应该通过DB语言加入,还是应该使用脚本语言轮询每个表?如果我应该加入,我应该做什么样的加入 样本内容如下:我店里的泰迪熊比泰迪山羊更柔软,但泰迪山羊更可爱。-James Teddyman于下午3:36发布。建议最好的方法是两个带列的表,通过用户id将用户内容与用户关联起来。从长远来看,这种方法可以更有效地管理熊和山羊。基本上是在post表中添加用户id。插入每个帖子所需的用户i

标题几乎说明了一切。我有用户发布内容,我想将用户表中的用户ID附加到帖子中。我应该在posts表中添加userid列,我应该通过DB语言加入,还是应该使用脚本语言轮询每个表?如果我应该加入,我应该做什么样的加入


样本内容如下:我店里的泰迪熊比泰迪山羊更柔软,但泰迪山羊更可爱。-James Teddyman于下午3:36发布。

建议最好的方法是两个带列的表,通过用户id将用户内容与用户关联起来。从长远来看,这种方法可以更有效地管理熊和山羊。

基本上是在post表中添加用户id。插入每个帖子所需的用户id。然后,通过提取信息,使用简单连接来获取完整信息。您选择的查询应该如下所示

 select post.content,post.date,users.firstname,user.lastname from post,users where post.userid=users.id

在这种情况下,一个非常常用的概念是拥有一个users表和一个post表,并用一个唯一的标识符将它们链接在一起。该标识符可以是任何东西—序列化id、用户名、邮件地址等—只要它是唯一的。链接是使用外键约束完成的。我不知道MySQL是如何做到这一点的,但在Postgres中是这样做的:

CREATE TABLE users (
  id serial PRIMARY KEY,
  name text
);

CREATE TABLE posts (
  content text,
  user_id integer REFERENCES users(id) NOT NULL
);
然后使用联接合并这些表。这可以通过几种方式完成,但在插入一些值后,这里有一个交叉连接:

@> INSERT INTO users (name) VALUES ('James');
@> INSERT INTO users (name) VALUES ('Jones');
@> INSERT INTO posts (content, user_id) VALUES ('Hello from James.', 1);
@> INSERT INTO posts (content, user_id) VALUES ('Greetings from Jones.', 2);
@> SELECT U.id AS user_id, U.name, P.content \
   FROM users U, posts P \
   WHERE U.id = P.user_id;

 user_id | name  |        content
---------+-------+-----------------------
       1 | James | Hello from James.
       2 | Jones | Greetings from Jones.
MySQL中的YMMV,但我认为上面的构造将直接工作


编辑:为澄清添加了插入内容

Wow。这真是行话。为什么在选择前使用a,为什么将U.id用作用户id,为什么可以接受使用U而不是用户?我认为表的昵称必须在使用前分配?如果愿意,可以跳过表别名,这只是编写查询的一种较短方法。如果posts.content比P.content更容易阅读,可以跳过别名。之前的选择是来自Postgres外壳的提示。好东西,neokio。谢谢你的链接。Awais Qarni,谢谢你的代码。我是需要使用脚本语言来处理Posts表中的用户ID分配,还是MySQL来处理?@Wolfpack'08欢迎亲爱的。但是我不明白你想说什么?选择post.content,post.date,users.username FROM post,users WHERE post.userid=post.id按post.date排序ASC似乎就是我要做的。以前,当我在帖子中输入INSERT-content-VALUES时,在日本,每个人都穿着箱形服装。如今,只有女孩才会穿,而且通常只有在毕业典礼上才会穿;,post.postID是自动递增的。是否需要会话cookie句柄post.userID?@Wolfpack'08完全由您决定。您可以将用户id存储在会话中,例如$_session['userid']=$userid,然后将此会话存储在查询中,其中post.userid=$_session['userid'];