Как оптимизировать код вложенных foreach, массивы?
Из таблицы voting_img создаю список картинок для голосования. Голосовать может только авторизованный пользователь. Результаты голосования заносятся в таблицу voting_img_reg. Из этой таблицы вывожу счетчик голосов для каждой картинки. Под каждой картинкой есть кнопка [Нравится]. После клика на эту кнопку вместо этой кнопки появляется текст [Вы проголосовали]. Приведенный ниже код работает, но на этот наворот смотреть не хочется. Особенно на запрос в БД внутри foreach. Наверняка можно упростить код за счет работы с массивами. Ни как не допераю как. Подскажите как изменить этот код?
// Данные по картинкам
$query = $db->getQuery(true);
$query
->select('*')
->from($db->quoteName('#__voting_img'))
->where($db->quoteName('status_img') .'='. $db->quote('Опубликовано'));
$db->setQuery($query);
$res_voting_img = $db->loadObjectList();
// Подсчет голосов
$query = $db->getQuery(true);
$query
->select('*, COUNT(voting) AS itog')
->from($db->quoteName('#__voting_img_reg'))
->where(1)
->group ('id_img');
$db->setQuery($query);
$res_voting_itog = $db->loadObjectList();
// Выводим список картинок
foreach ($res_voting_img as $value): ?>
<div><?=$value->name_img;?></div>
<div><img src="/images/<?=$value->file_img;?>"/></div>
<?// Кол-во голосов
foreach ($res_voting_itog as $value_itog):
{
if ($value->id_img == $value_itog->id_img)
{
echo "Кол-во голосов = ".$value_itog->itog;
} else { }
}
// Данные по голосовавшим
$query = $db->getQuery(true);
$query
->select('*')
->from($db->quoteName('#__event_voting_reg'))
->where($db->quoteName('id_img') .'='. $db->quote($value->id_img))
->where($db->quoteName('id_user') .'='. $db->quote($id_user));
$db->setQuery($query);
$result = $db->loadObject();
$id_img2 = $result->id_img;
if (isset($id_img2))
{ ?>
<div>Вы проголосовали</div>
<? } else { ?>
<form name="form_<?=$id_img;?>" method="POST" action="">
<input type="hidden" name="id_img" value="<?=$id_img;?>" />
<button>Нравится</button>
</form>