显示带照片的相册(PHP)

时间:2010-09-21 05:23:33

标签: php sql codeigniter mysql

首先,这确实不是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是什么。就我而言,它的album_id。我最后的加入声明是用album_id覆盖id。

1 个答案:

答案 0 :(得分:2)

是的,加入两个表是可行的方法。

  $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。

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

我正在使用带有Codeigniter的Doctrine,它提供了开箱即用的功能,它被称为阵列保温器。 可能想看看它。

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