Показать альбом с фотографиями (PHP) - PullRequest
2 голосов
/ 21 сентября 2010

Для начала, это действительно не специфично для 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?

ОБНОВЛЕНИЕ:

Ого, Тилман, вы профессионал.Большое спасибо за помощь.Для всех, кто ссылается на это, убедитесь, что вы изменили 'id' в $ array [$ row ['id']] [] = $ row;к какому бы идентификатору вашего альбома.В моем случае, его album_id.Моим последним заявлением о присоединении была перезапись id с идентификатором album_id.

1 Ответ

2 голосов
/ 21 сентября 2010

Да, объединение двух таблиц - это путь.

  $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, который предоставляет эту функциональность «из коробки», он называется гидратором массива. Возможно, стоит взглянуть на это.

Дайте мне знать, если вам нужна помощь в настройке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...