@adrenalinruslan

Много foreach это нормально?

В общем, как я понял, нужно делать как можно меньше запросов в базу данных и я решил 1 раз отправить запрос в базу данных и ответ записать в массив 1, а уже потом из массива 1 все что нужно доставать. И вот у меня такой вопрос, я сделал следующий код ( P.s сразу говорю на название переменных не обращайте внимание, я учусь только и это для теста ):

$catalog = 1; // Для теста 

$qa_products = $link->query('SELECT * FROM `products`');
	$array_products = array();
	while($w_products = $qa_products->fetch(PDO::FETCH_ASSOC)) {
		$array_products[] = $w_products;
	}

// В другом месте, код ( Нужно сделать поиск id каталога по массиву 1, если такой каталог найден, то он записывается в другой массив 2, потом массив 2 проверятся на кол-во строк, если их 0, то пишет что аккаунтов не найдено, если их >=1, то через foreach все они выводятся):

$get_catalog_1 = array();

							foreach($array_products as $for_products_1) {
								if($for_products_1['catalog_id'] == $catalog) {
									$get_catalog_1[] = $for_products_1;
								}
							}

							if(count($get_catalog_1) >= 1) {
								foreach($get_catalog_1 as $set_catalog_1): ?>
									<p><?php echo $set_catalog_1['title']; ?></p>
								<?php endforeach;
							} else {
								?>
									<p>В данной категории нет аккаунтов</p>
								<?php
							}


Если этот код запустить, то все работает. Но это нормально так сделано ? Тоисть это нормально что я так много использую массивов и foreach ? И если не правильно, то как будет правильнее его сделать ?
  • Вопрос задан
  • 264 просмотра
Пригласить эксперта
Ответы на вопрос 4
Symphony
@Symphony
SELECT * FROM `products` WHERE catalog_id = 1
Этот запрос уменьшит код.
Ответ написан
e_snegirev
@e_snegirev
если я правильно понял, вам нужен array_filter , чтоб не ходить по лишним элементам
Ответ написан
daager
@daager
Думаю:
SELECT *названия_столбцов, которые_вам_нужны* FROM `products` WHERE `catalog_id`='*id_категории*'

на порядок лучше того, что вы написали. Код в 3-4 раза короче будет и понятнее.

По скоростям:
- на маленькой таблице разница стремится к нулю
- на миллионной лучше MySQL с проставленными индексами.
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
1. Логику поиска лучше выносить в sql
2. Там где можно использовать встроенные функции - лучше использовать встроенные функции.
3. Цикл что-бы что-то вывести - это нормально. Плохо делать запросы в sql в цикле
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы