显示带照片的相册 (PHP)

Posted

技术标签:

【中文标题】显示带照片的相册 (PHP)【英文标题】:Display Album with Photos (PHP) 【发布时间】:2010-09-21 05:23:32 【问题描述】:

首先,这确实不是 CodeIgniter 特定的。我很难把握一个想法,所以任何了解 php/SQL(或任何我的问题)的人都可以加入。

我有 2 个表格,“照片”和“相册”。

Album columns : ID  TITLE  USER_ID  CREATED  MODIFIED
Photo columns : ID  ALBUM_ID  TITLE  LOC  CREATED  MODIFIED

我正在使用查询

 $this->db->select('*');
    $this->db->from('album');
    $this->db->join('photo', 'album.id = photo.album_id');
    $this->db->limit(10);
    return $this->db->get();

我认为可以翻译成

SELECT * FROM album JOIN photo ON album.id = photo.album_id LIMIT 10;

无论如何,我不明白的是如何显示每个相册以及相关照片。

比如……

<div class="album">
<img src="image1" />
<img src="image2" />
</div>
<div class="album">
<img src="image3" />
</div>

基本上,我如何“回显”正确的专辑及其相关图像?据我所知,foreach 循环只会写出每个图像,而不会区分图像属于哪个专辑。

我什至应该使用 JOIN 查询吗?

更新:

哇,好吧,蒂尔曼,你是专业人士。非常感谢您的帮助。对于引用此内容的其他任何人,请确保更改 $array[$row['id']][] = $row; 中的 'id'无论您的专辑 ID 是什么。就我而言,它的album_id。我最后的加入声明是用album_id 覆盖id。

【问题讨论】:

手动尝试对数据库进行查询(例如,使用 phpMyAdmin 或 mysql 查询浏览器,如果可用)并查看结果行的样子。它会给你一个关于如何在 php 循环中处理它们的好主意。 我在发布问题之前做过。该查询在 phpMyAdmin 中运行良好 【参考方案1】:

是的,连接这两个表是可行的方法。

  $query = $this->db->query('
      SELECT *
      FROM album a
      JOIN photo p ON a.id = p.album_id
      LIMIT 10
      ');

    foreach ($query->result_array() as $row) 
      $array[$row['id']][] = $row;
    

    foreach ($array as $album) 
      echo '<div class="album">';
      foreach ($album as $photo) 
        echo '<img src="' . $photo['src'] . '"/>';
      
      echo '</div>';
    

我破解了这段代码,希望对你有用。 我们从数据库中提取所有数据,将它们放入一个多嵌套数组中,按专辑分组。

然后遍历该数组并显示最终的 html

可能不是最漂亮的解决方案,但应该可以完成工作;)

我将 Doctrine 与 Codeigniter 一起使用,它提供了开箱即用的功能,它被称为数组水合器。 可能想看看。

如果您在设置方面需要帮助,请告诉我。

【讨论】:

我一定会看看 Doctrine。明天当我足够清醒以尝试您的解决方案和 ci+doctrine 测试时,我会回复。 由于您对 SO 比较陌生,如果对您有所帮助,我可以提醒您将我的问题标记为已接受的答案吗?谢谢;) 好吧,我还没有完全解决解决方案..但我想早点标记它不会有什么坏处。 =)

以上是关于显示带照片的相册 (PHP)的主要内容,如果未能解决你的问题,请参考以下文章

为什么安卓手机查看苹果手机照片不显示隐藏相册

苹果13相册上传啥意思

保存照片和视频到相册显示

为啥手机相册明明有些照片,但是用微信或者QQ发图片的时候找不到?

如何在文档中显示所有视频以及相册中的照片?

Android Studio 调用系统相机(超清)和相册的照片并显示在ImageView