【问题标题】:Issues with getting output from JOIN query从 JOIN 查询获取输出的问题
【发布时间】:2015-08-16 02:19:26
【问题描述】:

我正在尝试一个连接,如果它结构正确,我不肯定,但它没有失败。我正在处理的查询$query2。我正在尝试 SELECT 匹配 form_categories 表的 id 等于 forum_topics 表中的 category_id 并计算数量。基本上如果某个类别有 10 个不同的主题,我希望显示 10 个。

我的代码在我试图输出信息的地方死了。它只是从我的页面上消失了。

如果我的查询是正确的,这就是失败的输出...

<?php $numrows2 = mysqli_num_rows($query2);?>
<?php if ($numrows2 >= 0) : ?>
    <?php while ($row2 = mysqli_fetch_assoc($query2)) : ?>
        <?php $threads = $row['tid2']; ?>
        <div class="discussions_right">
        <p>Threads<?php echo $threads; ?></p>
    <?php endwhile; ?>
<?php endif; ?> 

完整代码

$query = mysqli_query($con,"SELECT * FROM forum_categories ORDER BY category_section ASC, category_title ASC")
or die ("Query failed: %s\n".($query->error));
$query2 = mysqli_query($con,"SELECT t.*, COUNT(c.id) AS tid FROM forum_topics AS t JOIN forum_categories AS c")
or die ("Query2 failed: %s\n".($query2->error));
?>
<?php if(mysqli_num_rows($query) > 0): ?>
<div class="discussions_table">
    <?php while($row = mysqli_fetch_assoc($query)): ?>
        <?php if($row['category_section'] !== $category_section): ?>
            <?php $category_section = $row['category_section'] ?>

            <div class="category_section">
                <?= $category_section ?>
            </div>
        <?php endif; ?>         
        <div class="category_border">
            <div class="discussions_left">
                <div class="discussions_category_title">
                    <a href="forum_view_category.php?cid=<?= $row['id'] ?>">
                        <?= $row['category_title'] ?>
                    </a>
                </div>
                <div class="discussions_category_description">
                    <?= $row['category_description'] ?>
                </div>
            </div>
            <?php $numrows2 = mysqli_num_rows($query2);?>
            <?php if($numrows2 >= 0):?>
                <?php while($row2 = mysqli_fetch_assoc($query2)): ?>
                    <?php $threads = $row['tid2']; ?>

            <div class="discussions_right">
                <p>Threads<?php echo $threads; ?></p>
                <?php endwhile; ?>
            <?php endif; ?> 
                <p>Posts</p>
            </div>
        </div>      
    <?php endwhile; ?>

<?php else: ?>
    <p>There are no posted categories available yet.</p>
<?php endif; ?>

我做错了什么?

更新:显示表结构。

CREATE TABLE `forum_categories` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `category_section` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `category_title` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
 `category_description` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `last_post_date` datetime DEFAULT NULL,
 `last_user_posted` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci


forum_topics
CREATE TABLE `forum_topics` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `category_id` int(11) NOT NULL,
 `topic_title` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
 `topic_creator` int(11) NOT NULL,
 `topic_last_user` int(11) DEFAULT NULL,
 `topic_date` datetime NOT NULL,
 `topic_reply_date` datetime NOT NULL,
 `topic_views` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

【问题讨论】:

  • 您缺少JOIN 查询的ON 部分
  • 写清晰的代码什么时候变得如此过时了?

标签: php mysql sql join count


【解决方案1】:

你测试过这个查询吗?

SELECT t.*, COUNT(c.id) AS tid FROM forum_topics AS t JOIN forum_categories AS c

我认为它没有达到您的预期。我可能错了。

编辑:

试试这个查询

SELECT t.*, COUNT(c.id) AS tid FROM forum_topics AS t INNER JOIN forum_categories AS c ON t.category_id = c.id

【讨论】:

  • 这是调试代码时应该执行的操作。不要测试整个代码。尝试逐步调试它。因为当您测试整个代码时,可能会出现不止一个错误,这会让您更加困惑。尝试对第一次查询之前的所有内容进行评论。或者你可以退出;在第一次查询之后。然后 var_dump($query1);这将向您展示 $query1 中的内容。如果它返回一个充满数据的数组,那么它工作正常,你可以继续下一个 $query2。转储它。如果它包含数据,那么它也可以正常工作。然后你可以去测试 $query1 的第一个输出。
  • 能否复制粘贴forum.categories 和forum.topics 的表结构(字段)?这样我们就可以看到您的表是如何相关的,并且可能会更正您的查询。
  • 好的。我更新了我的答案。尝试测试第一个查询。使用此代码: $query = mysqli_query($con, "SELECT category_section, category_title, category_description FROM forum_categories ORDER BY category_section ASC, category_title ASC") 或 die ("Query failed: %s\n".($query->error) );退出(var_dump($query));
  • 是的。正如我所说,可能有不止一个错误。修复一个错误并不总是能修复另一个错误。好的。现在尝试只输出这个 mysqli_num_rows($query) 而不是 $query。是 0 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多