使 phpbb mysql 查询显示主题中的所有帖子
Make phpbb mysql query display all posts in a topic
...与它目前正在做的相反,它显示特定论坛中每个主题的最后回复。
<?php
// How Many Topics you want to display?
$topicnumber = 10;
// Change this to your phpBB path
$urlPath = "../path/to/forum";
// Database Configuration (Where your phpBB config.php file is located)
include '../path/to/forum/config.php';
$table_topics = $table_prefix. "topics";
$table_forums = $table_prefix. "forums";
$table_posts = $table_prefix. "posts";
$table_users = $table_prefix. "users";
$link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd") or die("Could not connect");
mysql_select_db("$dbname") or die("Could not select database");
$query = "SELECT t.topic_id, p.post_text, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
FROM $table_topics t, $table_forums f, $table_posts p, $table_users u
WHERE t.topic_id = 7 AND
f.forum_id = t.forum_id AND
t.forum_id = 11 AND
t.topic_status <> 2 AND
p.post_id = t.topic_last_post_id AND
p.poster_id = u.user_id
ORDER BY p.post_id DESC LIMIT $topicnumber";
$result = mysql_query($query) or die("Query failed");
print '<div class="news_block">';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "<h4><a href=\"$urlPath/viewtopic.php?f=$row[forum_id]&t=$row[topic_id]&p=$row[post_id]#p$row[post_id]\" TARGET=\"\">" .
$row["topic_title"] .
"</a> </h4>By: " .
$row["username"] . ' - ' . date("l", $row["post_time"]) .
"<p>" .
$row["post_text"] . // <-----
"</p>";
}
print "</div>";
mysql_free_result($result);
mysql_close($link);
/* date("l", $row["post_time"]) . date('F j, Y, g:i a', $row["post_time"]) .*/
?>
你可能已经看出来了,我远不是一个编码员。我想我已经将它缩小到 p.post_id 需要更改,但无论我似乎分配给它什么整数或变量,我都无法获得预期的效果。在这一点上真的很感激一些帮助。谢谢
我认为你必须从查询中删除这部分:
AND p.post_id = t.topic_last_post_id
现在您正在请求与主题的最后一个 post 具有相同 ID 的 post(只有一个),但您不想只获得最后一个。你想得到所有 posts。
编辑:
您必须查看您的数据库并检查您的 post table 中是否有引用该主题的外键。
这样想:每个论坛都有很多主题,每个主题都有很多 post,每个 post 都有一个用户。因此,您必须在 table 之间建立联系,您可以遵循该联系来确定行如何匹配在一起。
联接在这方面非常有用。如果您使用已包含这些外键的已完成数据库模式,连接将帮助您连接查询。
这将是一个支持我的解释的格式正确的查询。
SELECT
*
FROM
$table_forums f
LEFT JOIN
$table_topics t ON t.forum_id = f.forum_id
LEFT JOIN
$table_posts p ON t.topic_id = p.topic_id
LEFT JOIN
$table_users u ON p.poster_id = u.user_id
WHERE
t.topic_id = 7 AND t.forum_id = 11
AND t.topic_status <> 2
ORDER BY p.post_id DESC
LIMIT $TOPICNUMBER
...与它目前正在做的相反,它显示特定论坛中每个主题的最后回复。
<?php
// How Many Topics you want to display?
$topicnumber = 10;
// Change this to your phpBB path
$urlPath = "../path/to/forum";
// Database Configuration (Where your phpBB config.php file is located)
include '../path/to/forum/config.php';
$table_topics = $table_prefix. "topics";
$table_forums = $table_prefix. "forums";
$table_posts = $table_prefix. "posts";
$table_users = $table_prefix. "users";
$link = mysql_connect("$dbhost", "$dbuser", "$dbpasswd") or die("Could not connect");
mysql_select_db("$dbname") or die("Could not select database");
$query = "SELECT t.topic_id, p.post_text, t.topic_title, t.topic_last_post_id, t.forum_id, p.post_id, p.poster_id, p.post_time, u.user_id, u.username
FROM $table_topics t, $table_forums f, $table_posts p, $table_users u
WHERE t.topic_id = 7 AND
f.forum_id = t.forum_id AND
t.forum_id = 11 AND
t.topic_status <> 2 AND
p.post_id = t.topic_last_post_id AND
p.poster_id = u.user_id
ORDER BY p.post_id DESC LIMIT $topicnumber";
$result = mysql_query($query) or die("Query failed");
print '<div class="news_block">';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "<h4><a href=\"$urlPath/viewtopic.php?f=$row[forum_id]&t=$row[topic_id]&p=$row[post_id]#p$row[post_id]\" TARGET=\"\">" .
$row["topic_title"] .
"</a> </h4>By: " .
$row["username"] . ' - ' . date("l", $row["post_time"]) .
"<p>" .
$row["post_text"] . // <-----
"</p>";
}
print "</div>";
mysql_free_result($result);
mysql_close($link);
/* date("l", $row["post_time"]) . date('F j, Y, g:i a', $row["post_time"]) .*/
?>
你可能已经看出来了,我远不是一个编码员。我想我已经将它缩小到 p.post_id 需要更改,但无论我似乎分配给它什么整数或变量,我都无法获得预期的效果。在这一点上真的很感激一些帮助。谢谢
我认为你必须从查询中删除这部分:
AND p.post_id = t.topic_last_post_id
现在您正在请求与主题的最后一个 post 具有相同 ID 的 post(只有一个),但您不想只获得最后一个。你想得到所有 posts。
编辑: 您必须查看您的数据库并检查您的 post table 中是否有引用该主题的外键。
这样想:每个论坛都有很多主题,每个主题都有很多 post,每个 post 都有一个用户。因此,您必须在 table 之间建立联系,您可以遵循该联系来确定行如何匹配在一起。
联接在这方面非常有用。如果您使用已包含这些外键的已完成数据库模式,连接将帮助您连接查询。
这将是一个支持我的解释的格式正确的查询。
SELECT
*
FROM
$table_forums f
LEFT JOIN
$table_topics t ON t.forum_id = f.forum_id
LEFT JOIN
$table_posts p ON t.topic_id = p.topic_id
LEFT JOIN
$table_users u ON p.poster_id = u.user_id
WHERE
t.topic_id = 7 AND t.forum_id = 11
AND t.topic_status <> 2
ORDER BY p.post_id DESC
LIMIT $TOPICNUMBER