我正在用户页面上列出标记/类别。我想显示用户为每个标签发的帖子数。标签、贴子和贴子标签位于不同的表中。
困难在于,有两种职位。文章和评论。它们在同一张表中,但类型不同。”“问题”和“答案”。答案中的相关id是与之相关的帖子的id。
我试着用很多方法来解决,但没能成功。
我的数据库结构:
对于标记:

tagid      tag_name

职位
id         type(enum:"question","answer")      related_id      user_id

对于贴标:
post_id    tag_id

我尝试的代码如下:
$user_active_query = mysql_query("select    p.id,
                                            p.user_id,
                                            pt.post_id,
                                            count(pt.post_id),
                                            pt.tag_id,
                                            t.tagid,
                                            t.tag_name
                                            from posts p
                                            inner join post_tags pt
                                            inner join tags t
                                            on p.id = pt.post_id
                                            and pt.tag_id = t.tagid
                                            where p.user_id = '$uid'
                                            group by t.tagid");
while($useractive = mysql_fetch_array($user_active_query)) {
    $user_active_counter = $useractive['count(pt.post_id)'];
    echo "<a href='' class='btn btn-mini' style='margin:3px;'>".$useractive['tag_name']." (".$user_active_counter.")</a>";
}

页面上给出了用户id。“$uid“。我只是厌倦了很多要求改正的尝试。首先,它似乎是存储post标签的最佳方式,但现在这是一个噩梦。我的意思是,对我来说,用这个结构做这个似乎是不可能的。

最佳答案

您可以得到两个计数,即用户发布的答案数和问题数,这里的技巧是使用正确的连接语法,您将丢失用于连接的on子句

SELECT
  p.id,
  p.user_id,
  pt.post_id,
  COUNT(pt.post_id) all_posts,
  COALESCE(SUM(`type` = 'question')) questions,
  COALESCE(SUM(`type` = 'answer')) answers,
  pt.tag_id,
  t.tagid,
  t.tag_name
FROM tags t
  LEFT JOIN post_tags pt  ON(pt.tag_id = t.tagid)
  LEFT JOIN posts p   ON p.id = pt.post_id
WHERE p.user_id = '$uid'
GROUP BY t.tagid

注意,在mysql sum中,使用一些表达式将得到一个布尔值
从注释中编辑使用或在上一个联接中添加另一个条件,以便第一个条件将联接与标记关联的帖子,由于您的解释标签没有直接链接到答案,但是答案与他们的问题有相关的id链接,因此可以将每个答案的相关id连接到标签id,这样也可以获取答案的标签
SELECT
  p.id,
  p.user_id,
  pt.post_id,
  COUNT(pt.post_id) all_posts,
  COALESCE(SUM(`type` = 'question')) questions,
  COALESCE(SUM(`type` = 'answer')) answers,
  pt.tag_id,
  t.tagid,
  t.tag_name
FROM tags t
  LEFT JOIN post_tags pt  ON(pt.tag_id = t.tagid)
  LEFT JOIN posts p   ON (p.id = pt.post_id OR p.related_id = pt.post_id)
WHERE p.user_id = '$uid'
GROUP BY t.tagid

09-04 23:41
查看更多