【问题标题】:help in inner join query (get post categories)帮助内部连接查询(获取帖子类别)
【发布时间】:2011-08-29 00:34:51
【问题描述】:

我已经建立了小型论坛脚本

在我正在使用的索引页面中

$query = mysql_query("SELECT * FROM threads");
while($threads = mysql_fetch_array($query)){
    echo 'Thread title ' . $threads['thread_title'];
    echo '<br />Thread content ' . $threads['thread'];
}

打印完整的网站帖子!

现在我想在标题下显示帖子类别和帖子标签

如何获取帖子的类别和标签?

我有一个包含这些信息的表格

表名 -> 关系

post_id|category_name

我想加入这个表并获取每个帖子的类别名称!

那么什么是正确的查询?

注意:我的站点数据库很大..所以我想要快速查询

非常感谢

【问题讨论】:

  • 这是一对多(一个帖子对多个类别)的关系吗?
  • 我不明白,但是我正在使用多个类别,例如 wordpress,但这不是 wordpress
  • 能否列出threadsrelations 表中包含的所有列?
  • threads -> thread_id,thread_title,thread_content,status -----------
    relations -> relation_id,cate_id,category_name,thread_id----> cate_id 是类别 id 和 thread_id 是帖子 id,类别名称是类别名称
  • 为什么relations 表中有category_name cate_id?听起来您正在对数据库进行反规范化

标签: php database


【解决方案1】:

您应该为您想要查看的数据发布它们包含的表和字段的列表。

但总体思路应该是这样的(假设线程表在 post_id 上有一个外键到关系表的 post_id):

SELECT t.*, r.category_name FROM threads as t
INNER JOIN relations as r on t.thread_id = r.thread_id

刚刚根据您刚刚列出的字段更新了上述查询。

仅供参考:如果您关心性能,您应该如上所示对数据库查询中的数据进行连接,对初始数据集中的每一行执行额外的查询将产生额外的调用 * 线程数。现在,通过查看该页面的用户数量倍增,数据库上的负载呈指数级增长,而且是不必要的。所有这些都可以在一个数据库查询中完成,这样每个用户只会在数据库中触发一个查询,而不是每次查看页面时可能会触发数百或数千个查询。

好的,在这种情况下试试这样的:

SELECT t.*, GROUP_CONCAT(r.category_name ORDER BY r.category_name SEPARATOR " ") as category_name 
FROM threads as t
INNER JOIN relations as r on t.thread_id = r.thread_id
GROUP BY r.thread_id;

【讨论】:

  • 它正在工作,我正在尝试这个查询!但是有大问题! ...现在我有 3 个帖子和 100 个标签(mysql_fetch_array)正在显示 103 个结果! (帖子结果+关系结果)的计数
  • 第一个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..第二个帖子标题..(103个结果!)
  • 通过“标签”您指的是关系表中的类别名称?所以换句话说,对于每个线程记录,您可能有许多关系记录,对吗?
  • 是的,没错,标签和类别名称在一个名为的表中 -> 关系,如果这很难 - wordpress 如何做到这一点!!!!!!
  • @Osama 当问自己“Wordpress 是如何做到这一点的?”时,答案不可避免地是“以最糟糕的方式”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多