我正在尝试创建一个从mysql表中获取数据的简单库。
我的想法是让这样的画廊
Category 1:
Image1 image2 image3 .. so on
Category 2:
Image4 image5 .. so on
我的表格结构如下所示:
Category Table
id cat_name status
------------------------
1 Category 1 A
2 Category 2 A
Image Table
id catID image status
----------------------------
1 1 A.jpg A
2 1 B.jpg A
3 1 C.jpg A
4 2 D.jpg A
5 2 E.jpg A
我尝试了如下查询:
class Gallery_Photo extends Model {
public function photosGallery()
{
$result = $this->query('SELECT * FROM photos WHERE status = "A" ORDER BY pcID ');
return $result;
}
}
但它不起作用。任何想法如何显示所需?
答案 0 :(得分:2)
获取您正在寻找的内容的最简单方法可能是简单的GROUP_CONCAT
,它会为您提供以逗号分隔的每个类别的图片列表;
SELECT cat_name, GROUP_CONCAT(image ORDER BY image.id) images
FROM category
JOIN image
ON category.id = image.catid
GROUP BY category.id
cat_name images
-----------------------------
Category 1 A.jpg,B.jpg,C.jpg
Category 2 D.jpg,E.jpg
答案 1 :(得分:0)
基于GROUP_CONCAT的解决方案相当丑陋,因为它需要后期处理,而且最糟糕的是,当你不仅需要图像名称而且需要其他一些信息(如尺寸或标题)时,它会让你感到痛苦。
同时,PDO具有一个现成的功能,完全符合您的情况,称为PDO::FETCH_GROUP。
你需要的只是首先选择共同领域,其余的是难以置信的简单:
$sql = "SELECT cat_name, image FROM category c, image i WHERE c.id = i.catid";
$data = $pdo->query($sql)->fetchAll(PDO::FETCH_GROUP);
您将拥有一个嵌套数组,其中键将是类别名称,值将是带图像的数组。因此,您只需要两个嵌套循环来完成任务:
<? foreach($data as $cat_name => $images): ?>
<?=$cat_name?><br>
<? foreach($images as $row): ?>
<img src="<?=$row['image']?>">
<? endforeach ?>
<? endforeach ?>