我目前正在练习"建立一个论坛。我以前从来没有做过这么大的事,而且它已经持续了一段时间。几乎一切都有效,但我无法从索引页面上的类别中选择正确的最新主题。
这是SQL:
$sql = '
SELECT topic_id, topic_subject, topic_by FROM topics WHERE topic_cat IN (1,2,3) ORDER BY topic_cat DESC LIMIT 3
UNION
SELECT cat_id, cat_name, cat_description FROM categories WHERE cat_id IN (1,2,3)
';
这是主题表。
从SQL中可以看出,这里的基本思想是选择三个第一类,然后从这三个类别中选择最新的主题。
将sql检索的信息放入包含所有内容的表中的代码。
$result = mysqli_query($conn, $sql);
if (!$result) {
echo 'Could not display categories. Error: ' . mysqli_error($conn);
} else {
if (mysqli_num_rows($result) == 0) {
echo 'No categories found in the database.';
} else {
echo '
<table>
<h3>Top 3 Categories</h3>
<tr>
<th>Category</th>
<th>Latest Topic</th>
</tr>
';
while ($row = mysqli_fetch_assoc($result)) {
echo '<tr>
<td class="leftpart">
<h3><a href="category.php?id=' . $row['cat_id'] . '">' . $row['cat_name'] . '</a></h3>' . $row['cat_description'] . '
</td>
<td class="rightpart">
<a href="topic.php?id=' . $row['topic_id'] . '">' . $row['topic_subject'] . '</a>
</td>
</tr>
';
}
echo '</table>';
}
}
我不确定还有什么要添加到此,所以如果有任何问题,请对其进行评论,我可以在那里回答或在主帖上添加其他信息!
答案 0 :(得分:2)
您实际需要的是JOIN,它基本上用于根据两个或多个表之间的相关列组合来自两个或多个表的行。
以下是SQL中不同类型的JOIN:
这就是你想要的:
SELECT
topics.topic_id,
topics.topic_subject,
categories.cat_id,
categories.cat_name,
categories.cat_description
FROM
topics
JOIN
categories
ON topics.topic_cat = categories.cat_id
ORDER BY
topics.topic_date DESC LIMIT 3;
你没有得到工会的正确结果的原因在这里看看:
UNION运算符用于组合两个或多个SELECT语句的结果集。
您的桌子不符合上述创意
答案 1 :(得分:0)
试试这个:
select * from topics inner join categories
on topics.topic_cat = categories.cat_id
order by topics.topic_date desc limit 3
基本上,内部联接会执行此操作。如果需要,您可以选择特定字段而不是*。