2017-06-04 52 views
1

这里是我当前的查询:如何获取查询中每个帖子的作者?

SELECT id, 
     subject, 
     category cat, 
     keywords tags, 
     body_html, amount, 
     date_time, 
     (SELECT COALESCE(sum(vv.value),0) 
      FROM votes vv 
      WHERE qanda.id = vv.post_id and 15 = vv.table_code) AS total_votes, 
     (SELECT COALESCE(sum(vt.total_viewed),0) 
      FROM viewed_total vt 
      WHERE qanda.id = vt.post_id and 15 = vt.table_code limit 1) AS total_viewed 
FROM qanda WHERE type = 0 $query_where 
ORDER BY $query_order 
LIMIT :j,11; 

它提供了一个列表(最多10例)职位。现在我还需要获取每篇文章的作者姓名。我怎样才能做到这一点?

我的表结构是这样的:

// users 
+----+--------+-----------------+-------- 
| id | name |  email  | .... 
+----+--------+-----------------+-------- 

// qanda 
+----+------------+-----------------------+-----------+-------- 
| id | title |   body   | author_id | .... 
+----+------------+-----------------------+-----------+-------- 
-- author_id refers to the id column of users table 

我可以添加一个子查询来获取作者的名字就每一个职位。但我认为使用join会更好。

回答

1

可能是你需要一个内部连接woth用户

SELECT a.id, 
     a.subject, 
     a.category cat, 
     a.keywords tags, 
     a.body_html, 
     a.amount, 
     a.date_time, 
     u.name 
     (SELECT COALESCE(sum(vv.value),0) 
      FROM votes vv 
      WHERE qanda.id = vv.post_id and 15 = vv.table_code) AS total_votes, 
     (SELECT COALESCE(sum(vt.total_viewed),0) 
      FROM viewed_total vt 
      WHERE qanda.id = vt.post_id and 15 = vt.table_code limit 1) AS total_viewed 
    FROM qanda a 
    INNER JOIN users u on a.id = u.author_id 
    WHERE type = 0 $query_where 
    ORDER BY $query_order 
    LIMIT :j,11; 

,如果有的岗位没有创作就必须使用左连接

SELECT a.id, 
     a.subject, 
     a.category cat, 
     a.keywords tags, 
     a.body_html, 
     a.amount, 
     a.date_time, 
     u.name 
     (SELECT COALESCE(sum(vv.value),0) 
      FROM votes vv 
      WHERE qanda.id = vv.post_id and 15 = vv.table_code) AS total_votes, 
     (SELECT COALESCE(sum(vt.total_viewed),0) 
      FROM viewed_total vt 
      WHERE qanda.id = vt.post_id and 15 = vt.table_code limit 1) AS total_viewed 
    FROM qanda a 
    LEFT JOIN users u on a.id = u.author_id 
    WHERE type = 0 $query_where 
    ORDER BY $query_order 
    LIMIT :j,11; 
+0

谢谢。给予好评。你确定'INNER JOIN'吗?由于有些帖子没有任何作者。我猜'LEFT JOIN'会更好。我对吗? –

+0

答复已更新...左加入,如果不是所有帖子都有用户 – scaisEdge

相关问题