帮助内联接查询(获取帖子类别)

时间:2011-08-29 00:34:52

标签: php database

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

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

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

打印完整的网站帖子!

现在我希望在标题

下显示帖子类别和帖子标签

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

我有表格包含此信息

表名 - &gt;关系

POST_ID | CATEGORY_NAME

我想加入此表并获取每个帖子的category_name!

那么什么是正确的查询?

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

非常感谢

1 个答案:

答案 0 :(得分: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;