2012-01-29 41 views
0

我正在尝试代码我自己的论坛系统,并且一切都进行得很顺利,除了1件事情。在2个独立的东西上检索2个独立用户的用户名

在浏览某个类别时,我如何能够检索每个线程的创建者的用户名,以及每个线程中发布最后一篇文章的用户的用户名?

这是我到目前为止,但我仍然只检索1个用户名(OP的用户名)。

SELECT 
    c_name, <-- category name 
    t_title, <-- thread title 
    t_by, <-- thread started by user id 
    username, <-- username of the thread starter 
    p_by, <-- post by user id 
    p_date, <-- post posted date 
    COUNT(p_id) as total_posts 
FROM 
    forum_categories 
LEFT JOIN 
    forum_threads 
ON 
    t_cat = c_id 
LEFT JOIN 
    forum_posts 
ON 
    p_thread = t_id 
LEFT JOIN 
    users 
ON 
    t_by = id 
AND 
    p_by = id 
WHERE 
    t_cat = 1 

正如你所看到的,我只检索线程启动器的用户名。 它甚至可以用单个查询来做到这一点吗?

感谢

回答

1

你应该离开加入了在查询两个用户:

SELECT 
    c_name,   <-- category name 
    t_title,   <-- thread title 
    t_by,    <-- thread started by user id 
    ut_by.username, <-- username of the thread starter 
    p_by,    <-- post by user id 
    up_by.username, <-- username of the post 
    p_date,   <-- post posted date 
    COUNT(p_id) as total_posts 
FROM 
    forum_categories 
     LEFT JOIN 
    forum_threads 
     ON t_cat = c_id 
     LEFT JOIN 
    forum_posts 
     ON p_thread = t_id 
     LEFT JOIN 
    users ut_by 
     ON t_by = ut_by.id 
     LEFT JOIN 
    users up_by 
     on p_by = up_by.id 
WHERE 
    t_cat = 1 

这是关于获得用户的详细信息,两个答案。有关此查询可能包含的其他错误的免责声明。

+0

你可以在同一个查询中两次加入同一个表吗? – MrE 2012-01-29 22:08:37

+0

当然,一个典型案例是'employees' oracle示例表。它包含'manager_id'的外键,其中'manager_id'也是'employee',您可以加入员工。在这种情况下,你所需要的就是给表分配一个别名。 – danihp 2012-01-29 22:14:52

+0

男人我觉得愚蠢的,因为之前没有尝试过。完美的作品:)。 非常感谢。将其标记为一旦可能的答案。 – MrE 2012-01-29 22:15:06