2010-08-24 78 views
1

OK,我们开始吧...JOIN 3个表查询

我有3个表:文章,评论和成员,我需要从成员的评论和用户名,得到的职位头衔,味精。 所有表具有相同的ID关联

例如(?):我想从某些ID这些数据...

对不起我的英语不好,是不是我的语言,我很MySQL基本技能(今天开始)。

编辑: 这是我的架构:

posts: |ID|title| 
      ---------------- 
      |1 |post title|  (example data) 

comments: |USERID|UID|msg| (UID is same as posts.ID) 
      ----------------- 
      |5  |1 |message| (example data)  

members: |USERID|username| 
      ----------------- 
      |5  |myusername| (example data) 

当我做一个查询ID 80(例如)将返回标题,有关该职位(UID)的消息和用户名关联那个评论。

例如。如果帖子80有5条评论显示,帖子的标题和评论的用户名。

我认为这更清楚。 (不是吗?)

+1

显示模式。你可以张贴'描述';'语法来给出一些信息。 – extraneon 2010-08-24 13:30:07

+0

每个表的外键是什么 - 将每个表与其他表匹配的列? – Russ 2010-08-24 13:34:16

回答

2

也许是这样的:

SELECT P.Title, C.Message, M.Username 
FROM Posts P 
INNER JOIN Comments C ON P.PostID = C.PostID 
INNER JOIN Memmbers M ON C.MemberID = M.MemberID 
WHERE P.PostID = 123 

这是你的架构(我认为我是更好的,这就是为什么我离开它):)

SELECT P.title, C.msg, M.username 
FROM posts P 
INNER JOIN comments C ON P.ID = C.UID 
INNER JOIN memmbers M ON C.USERID = M.USERID 
WHERE P.ID = 80 

文章标题在这种情况下会重复,但我相信这是你要求的。

+0

这就是谢谢你! – greenbandit 2010-08-24 14:21:01

0

没有看到你的方案我只能猜测,但我认为它可能是这个样子:

SELECT p.title, c.msg, m.username 
FROM Posts p 
INNER JOIN Comments c ON (p.AssociateID = c.AssociateID) 
INNER JOIN Members m ON (m.AssociateID = p.AssociateID) 
WHERE p.AssociateID = 123 

如果你的模式是不同的,调整上面的SQL,以适应你的表结构。

0

您的所有表结构的第一(单数表名)看起来应该是这样的:

后: ID 标题 member_id

评论: ID 味精 POST_ID member_id

成员: ID 用户名

SELECT p.title, c.msg, m.username 
FROM comment c 
INNER JOIN post p ON p.id = c.post_id 
INNER JOIN member m ON m.id = p.member_id 
WHERE m.id = YOURUSERIDGOESHERE 
0

你也可以这样做:

SELECT P.Title, C.Message, M.Username 
FROM Posts P, Comments C, Members M 
WHERE P.ID = C.UID 
AND C.USERID = M.USERID 
AND P.PostID = 80 

这将产生相同的结果作为连接其他几个人的建议,但有些人觉得WHERE显示关系更清楚。这只是个人喜好的问题。