views:

47

answers:

1

To start off, this really isn't CodeIgniter specific. I'm having trouble grasping an idea, so anyone that knows PHP/SQL (or whatever my problem is) can jump in.

I have 2 tables, 'Photo' and 'Album'.

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

I'm using the query

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

which I think translates into

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

Anyways, what I don't understand is how to display each album with the related photos.

So something like...

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

Basically how do I "echo" out the correct albums and their relative images? As far as I can tell, a foreach loop is just going to write out each image without discriminating between which album the image belongs to.

Should I even be using a JOIN query?

UPDATE:

Wow, ok tilman, you are pro. Thanks a lot for the help. For anyone else referencing this, make sure you change 'id' in $array[$row['id']][] = $row; to whatever your album id is. In my case, its album_id. My final join statement was overwriting id with album_id.

+1  A: 

Yes, JOINing the two tables is the way to go.

  $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>';
    }

I hacked up this piece of code, I hope this works for you. We pull all the data from the db, put them in a multi-nested array, grouped by albums.

Then iterate over that array and display the final html.

Probably not the prettiest solution, but should get the job done ;)

I am using Doctrine with Codeigniter, which provides this functionality out-of-the-box, it's called the array hydrator. Might want to have a look at it.

Let me know if you need help setting it up.

tilman
I'll definitely take a look at Doctrine. I'll post back tomorrow when I'm awake enough to try out your solution and a ci+doctrine test.
Elxx
Since you are relatively new to SO, may I remind you to mark my question as the accepted answer, if it helped you out? Thanks ;)
tilman
Well, I wasn't quite done working out the solution..but I guess marking it early won't hurt. =)
Elxx