2

我正在加入 4 个表,并希望创建一个 while 循环来吐出嵌套在不同类别下的结果。

我的桌子

类别
ID | 分类名称

页面
ID | 页名 | 类别

page_content
id | page_id | image_id

图片
ID | 拇指路径

我当前的 SQL 连接

<?php $all_photos = mysql_query("
    SELECT * FROM categories JOIN pages ON pages.category = categories.id
    JOIN image_pages ON image_pages.page_id = pages.id
    JOIN images ON images.id = image_pages.image_id
");?>

我想要的结果来自 while 循环

我想得到这样的东西......

类别 1
页 1
图片 1、图片 2、图片 3

第 2 页
图 2,图 4

类别 2
页 3
图片 1

第 4 页
图片 1,图片 2,图片 3

每个图像可以属于多个页面,每个页面可以属于多个类别。

目前我有 2 个解决方案,一个根据其中的页面数量多次列出每个类别:

例如。类别 1,第 1 页,图像 1 - 类别 1,第 1 页,图像 2 等

一个在另一个while循环中使用一个while循环,在另一个while循环中使用一个while循环,导致3个sql查询。

<?php $all_categories = mysql_query("SELECT * FROM categories");?>

<?php 

    while($all_category = mysql_fetch_array($all_categories)) {

        ?>
        <h4><?=$all_category['category_name']?></h4>

        <?php $all_pages = mysql_query("SELECT * FROM pages WHERE category = " . $all_category['id'] . "");?>

        <?php 
            while($all_page = mysql_fetch_array($all_pages)) {
            ?>
                <p><?=$all_page['page_name']?></p>


                <?php $all_images = mysql_query("SELECT * FROM images JOIN image_pages ON image_pages.page_id  = " . $all_page['id'] . " AND image_pages.image_id = images.id");

                ?>

                <div class="admin-images-block clearfix">

                <?php

                while($all_image = mysql_fetch_array($all_images)) {
                ?>


                    <img src="<?=$all_image['thumb_path']?>" alt="<?=$all_image['title']?>"/>


                <?php
                }

                ?>
                </div>
                <?php
            }
    }

?>
4

1 回答 1

1

我认为第二种解决方案更好更直接。你可以这样做:

更新:

  <?php
$all_cats=mysql_query("select * from categories");
while($all_cat = mysql_fetch_array($all_cats)){
    //print your cat title 
    $check = mysql_query("select * from images i, pages p, page_content pc categories c where c.id = p.category and p.id = pc.page_id and pc.image_id=i.id");

    if(mysql_num_rows($check) > 0){

    $all_pages=mysql_query("select * from pages where category=".$all_cat['id']);
    while($all_page = mysql_fetch_array($all_pages)){
        //print your page
        echo "<p>".$all_page['page_name']."</p>";
        ?>
        <div class="admin-images-block clearfix">
            <?php

            $all_images=mysql_query("select * from images where id=".$all_page['image_id']);
            while($all_image = mysql_fetch_array($all_images)) {
            //print your img
            ?>
                <img src="<?=$all_image['thumb_path']?>" alt="<?=$all_image['title']?>"/>
            <?php}?>
         </div>
    <?php
    }

    }
}
?>

祝你好运:)

于 2012-11-18T11:47:18.467 回答