在一个查询中查询4个MySQL表

时间:2018-03-21 04:25:38

标签: php mysql sql join phpmyadmin

我正在构建一个论坛网站,我希望以下列格式向用户显示所有主题:

_________________________________________________________________________
Thread Title
Last Post: Username at Date, Started By: Username at Date
_________________________________________________________________________

这就是我提出的:

         SELECT TD.id       thread_id,
                TD.sub_cat  thread_cat,
                TD.title    thread_title,
                TD.date     thread_date,
                TD.status   thread_status,
                TD.stick    thread_stick,

                US.username user,

                GR.color group_color

        FROM fr_thread AS TD
        INNER JOIN user AS US ON TD.user_id = US.id
        INNER JOIN user_group AS GR ON US.user_group = GR.id
        ORDER BY TD.stick

虽然我显示了所有主题,但我还希望用户名根据他们所在的用户群进行着色。因此,我还需要查询。

虽然我已经提出了大部分查询,我仍然坚持如何查询用户名,群组颜色,最后一张海报的日期。

这大致是我的数据库设计的样子:

user:
id
user_group

user_group:
id
color

fr_thread:
id
sub_cat
user_id
date

fr_reply:
id
thread_id
user_id
date

1 个答案:

答案 0 :(得分:0)

尝试

SELECT  

    TD.id as thread_id , 
    TD.sub_cat as thread_sub_cat , 
    TD.user_id as thread_started_user_id , 
    TD.date as thread_started_on , 

    US1.name as thread_author , 
    US2.id as last_reply_user_id , 
    US2.name as last_reply_user_name , 

    USG1.color as thread_author_color ,  
    USG2.color as lat_reply_user_color , 

    RE.date as last_reply_date 

FROM  

    fr_thread TD join user US1 on TD.user_id = US1.id

    join user_group USG1 on USG1.id = US1.user_group 

    join fr_reply RE on RE.thread_id = TD.id

    join user US2 on US2.id = RE.user_id 

    join user_group USG2 on USG2.id = US2.user_group

user和[{1}}创建了US1表的2个别名,并且US2

有2个与user_group相似的(创建者和最后一个回复者)

http://sqlfiddle.com/#!9/951c0b/1