2010-09-21 3 views
2

Для начала это действительно не специфичный для CodeIgniter. У меня возникли проблемы с пониманием идеи, поэтому любой, кто знает PHP/SQL (или что бы то ни было моя проблема), может зайти.Показать альбом с фотографиями (PHP)

У меня есть 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-запрос?

UPDATE:

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

+0

Попробуйте этот запрос в своей базе данных вручную (скажем, с помощью phpMyAdmin или Mysql Query Browser, если он доступен) и посмотрите, как выглядят результирующие строки. Это даст вам хорошую идею о том, как обрабатывать их в петле php. – Fanis

+0

Я сделал, прежде чем я разместил вопрос. Запрос хорошо работает в phpMyAdmin – Elxx

ответ

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

Я взломал этот кусок кода, надеюсь, это сработает для вас. Мы извлекаем все данные из db, помещаем их в многопоточный массив, сгруппированный по альбомам.

Затем переберите этот массив и отобразите последний html.

Вероятно, не симпатичное решения, но должна получить работу;)

Я использую Учение с Codeigniter, которая обеспечивает эту функцию вне коробки, это называется массив увлажняющим. Можете взглянуть на него.

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

+0

Я обязательно посмотрю на Доктрину. Я отправлю обратно завтра, когда я проснусь, чтобы опробовать ваше решение и тест доктрины ci +. – Elxx

+0

Поскольку вы относительно новичок в SO, могу ли я напомнить вам отметить мой вопрос как принятый ответ, если он вам помог? Спасибо;) –

+0

Ну, я не совсем поработал над решением ... но я думаю, что его ранняя ранняя не повредит. знак равно – Elxx

Смежные вопросы