在已经运行的查询循环中,从第二个表调用循环查询

时间:2013-09-18 11:16:17

标签: php mysql loops while-loop

好吧,所以我一直在网上搜索以及stackoverflow一段时间来回答我的问题(下面),但是我发现的几乎每一个解释和/或主题对我来说都太复杂或者没有不能满足我的特殊需求......

简而言之,我有一个博客可以输出大量的POST。每个POST包含多个图像。 POST包含TITLE,DESCRIPTION,POST DATE等数据。这些内容包含在名为 tbl_blog 的一个表中。 IMAGES属于他们自己的名为 tbl_blog_imgs 的表。

现在,我的代码“有效”,但它只显示一个博客帖子,其中的图片与该博文的ID相匹配。 (在 tbl_blog_imgs 中,我有一行名为blog_key,与 tbl_blog 中每个条目的ID相匹配)

问题自然是我有多个博客文章,只有一个似乎发布... IN

我的代码......

<?php

require('myownsecretfile.php');

$sql = "SELECT blog_id, blog_title, blog_desc, date_format(blog_post_date,'%d/%m/%Y') as blog_post_date ";
$sql .= "FROM tbl_blog ";

$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)) {
    $blog_id = $row['blog_id']; 
    $blog_title = $row['blog_title']; 
    $blog_desc = $row['blog_desc'];
    $blog_post_date = $row['blog_post_date'];       

    ?>

    <div class="blog-title"><a href="blog_more.php?blog_title=<?php echo $blog_title; ?>"><?php echo $blog_title; ?></a>
    <p class="blog-post-date-style">-&nbsp;<?php echo $blog_post_date; ?>&nbsp;-</p>
    <br>
    <div class="blog-desc">
    <p class="blog-description-style"><?php echo $blog_desc; ?></p>
    </div>
    </div>
    <br>

    <?php

    $sql = "SELECT * ";
    $sql .= "FROM tbl_blog_imgs ";
    $sql .= "WHERE blog_img_key='$blog_id' ";

    $result = mysql_query($sql);

    while($row = mysql_fetch_assoc($result)) {
        $blog_img_key = $row['blog_img_key'];   
        $blog_img_path = $row['blog_img_path']; 
        $blog_img_alt = $row['blog_img_alt'];
        $blog_img_title = $row['blog_img_title'];       

        ?>

        <img src="images/blog/<?php echo $blog_img_path; ?>" alt="<?php echo $blog_img_alt; ?>" title="<?php echo $blog_img_title; ?>"><br>


        <?php
    }
}   
?>

我必须执行INNER JOIN吗?如果没有,那么在循环中实现循环的最智能和最有效的方法是什么......

1 个答案:

答案 0 :(得分:1)

您对两个查询使用相同的变量$result。因此,当它完成显示第一个博客的所有图像,并返回到外部循环的开头时,它会

$row = mysql_fetch_assoc($result);

但现在$result包含图片查询的结果,而不是博客查询。并且由于该查询已返回其所有行,因此返回false,因此外部循环终止。

将其更改为$result_blog$result_img,我认为您的问题应该得到解决。

对两个循环使用相同的变量$row也很困惑。在这种情况下,它不会导致问题,因为您立即将变量设置为这些数组的元素。但这是一个坏习惯,所以我建议你重命名它们。