PHP While loop seperating unique categories from multiple 'Joined' tables
Posted
by
Hob
on Stack Overflow
See other posts from Stack Overflow
or by Hob
Published on 2012-11-18T10:49:47Z
Indexed on
2012/11/18
10:59 UTC
Read the original article
Hit count: 216
I'm pretty new to Joins so hope this all makes sense.
I'm joining 4 tables and want to create a while loop that spits out results nested under different categories.
My Tables
categories
id | category_name
pages
id | page_name | category
*page_content*
id | page_id | image_id
images
id | thumb_path
My current SQL join
<?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
");?>
The result I want from a while loop
I would like to get something like this....
Category 1
page 1
Image 1, image 2, image 3
page 2
Image 2, image 4
Category 2
page 3
image 1
page 4
image 1, image 2, image 3
I hope that makes sense.
Each image can fall under multiple pages and each page can fall under multiple categories.
at the moment I have 2 solutions, one which lists each category several times according to the the amount of pages inside them:
eg. category 1, page 1, image 1 - category 1, page 1, image 2 etc
One that uses a while loop inside another while loop inside another while loop, resulting in 3 sql queries.
<?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
}
}
?>
© Stack Overflow or respective owner