对,你好。
我一直在研究一个网站模板,我编写了类似论坛的部分,但只是讨论线程,现在,我正在努力解决特定的查询问题。此
SELECT * FROM cms_discussions d JOIN cms_discussions_comments c ON d.id = c.discussionid ORDER BY c.time DESC LIMIT 10
我认为很容易看到别人如何回答如何通过另一张桌子排订一张桌子的问题。所以我尝试了他们的方法,但现在它将它们相互混合。这就是我按ID分类线程时的样子
SELECT * FROM cms_discussions ORDER BY id DESC LIMIT 10
在使用我首次提供的SQL查询时,结果有点错误。该帖子的作者已更改为' server' (这是 cms_discussions_comments 中的作者字段),所以基本上,'作者'来自 cms_discussion 的字段将替换为' author'来自 cms_discussions_comments 的字段。我如何显示线程非常简单。
<?php
$response = $databaseHandle->query("SELECT * FROM cms_discussions d JOIN cms_discussions_comments c ON d.id = c.discussionid ORDER BY c.time DESC LIMIT 10");
while($row = $response->fetch_assoc()) {
stripslashes_array($row);
?>
<table class="row" onclick="window.location.href = '/discussion/<?php echo $row["id"]; ?>/';">
<tr>
<td style="width: 50px"><img src="/styles/<?php echo $styleConfig["theme"]; ?>/album/discussions/<?php echo ($row["active"] == 1)?("status_info"):("status_locked"); ?>.png"></td>
<td><p id="title"><?php echo $row["title"]; ?></p><br><p id="description">Posted <?php echo date("F j, Y, g:i A", $row["posted"]); ?> by <i><?php echo $row["author"]; ?></i>.</p></td>
</tr>
</table>
<?php } ?>
<?php } ?>
我真的不确定这里的问题是什么,因为我通常只是做基本的查询。提前感谢您的任何帮助。
答案 0 :(得分:0)
由于您的两个表格cms_discussions
和cms_discussions_comments
都包含author
字段,因此如果只执行SELECT *
,则结果数组中将无法访问其中一个二进制数}。
您需要做的是明确选择字段并指定别名,以便没有重叠。
您可以执行以下操作:
SELECT d.*, c.author AS comment_author FROM cms_discussions d JOIN cms_discussions_comments c ON d.id = c.discussionid ORDER BY c.time DESC LIMIT 10
通过该查询,您的$row['author']
会引用cms_discussions
字段,而$row['comment_author']
会引用cms_comments
字段。话虽如此,您可能希望对id
等其他字段执行相同操作。
如果您只是不想从cms_discussions_comments
中选择列,那么这将解决问题:
SELECT d.* FROM cms_discussions d JOIN cms_discussions_comments c ON d.id = c.discussionid ORDER BY c.time DESC LIMIT 10