Вывожу из БД, логика примерно такая:
$STH = $DBH->query('SELECT id,name,image,link,categ from products');
$STH->setFetchMode(PDO::FETCH_ASSOC);
while($row = $STH->fetch()) {
$content='<a href="product.php?link='.$row['link'].'"><div class="col-md-3 col-xs-12 col-sm-6 mainposter">'.
'<div class="wrapp_mainposter_content">'.
'<img src="img_tovar/'.$row['image'].'" class="mainblockimg"/>'.
'<div class="mainposter_title">'.$row['name'].'</div>'.
'</div></div></a>';
if($row['categ']=='categ1'){ echo "<h2>Категория1</h2>".$content}
if($row['categ']=='categ2'){ echo "<h2>Категория2</h2>".$content}
}
Хочу вывести заголовок + товары, но разумеется так, как в цикле, заголовок выводится кучу раз, это можно, конечно, решить с помощью 2-ух отдельных запросов с where, но это как то не оптимально.
Самое тупое решение "в лоб":
<?php
$STH = $DBH->query('SELECT id,name,image,link,categ from products');
$STH->setFetchMode(PDO::FETCH_ASSOC);
$result = $STH->fetchAll();
?>
<h2>Категория 1</h2>
<?php
foreach($result as $row) {
if($row['categ']=='categ1'){
?>
<a href="product.php?link=<?=$row['link']?>">
<div class="col-md-3 col-xs-12 col-sm-6 mainposter">
<div class="wrapp_mainposter_content">
<img src="img_tovar/<?=$row['image']?>" class="mainblockimg"/>
<div class="mainposter_title"><?=$row['name']?></div>
</div>
</div>
</a>
<?php
}
}
?>
<h2>Категория 2</h2>
<?php
foreach($result as $row) {
if($row['categ']=='categ2'){
?>
<a href="product.php?link=<?=$row['link']?>">
<div class="col-md-3 col-xs-12 col-sm-6 mainposter">
<div class="wrapp_mainposter_content">
<img src="img_tovar/<?=$row['image']?>" class="mainblockimg"/>
<div class="mainposter_title"><?=$row['name']?></div>
</div>
</div>
</a>
<?php
}
}
?>
Как всегда, основную мысль уже обозначили в комментариях.
Идея: при прохождении в цикле сначала распихиваем в массивчик по категориям, а затем уже по этому (результирующему) массивчику выводим.
Единственное что скажу, раз Вы всё равно используете величайшее изобретение человечества (PDO), то почему бы не использовать и FETCH_GROUP:
$STH = $DBH->query('SELECT categ,id,name,image,link from products');
$data = $STH->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_ASSOC);
foreach($data as $categ => $c_data) {
if($categ =='categ1'){ echo "<h2>Категория1</h2>"}
if($categ =='categ2'){ echo "<h2>Категория2</h2>"}
foreach($c_data as $row) {
echo '<a href="product.php?link='.$row['link'].'">'.
'<div class="col-md-3 col-xs-12 col-sm-6 mainposter">'.
'<div class="wrapp_mainposter_content">'.
'<img src="img_tovar/'.$row['image'].'" class="mainblockimg"/>'.
'<div class="mainposter_title">'.$row['name'].'</div>'.
'</div></div></a>';
}
}
Остальное, про что пишут в комментах - это на любителя. Если проект еще на стадии зародыша - имеет смысл действительно подумать о шаблонизаторах, фреймворках и прочем, потому что "прикрутить потом" будет намного сложнее, чем сделать это сразу. Но это решать Вам.
Использовавшаяся для решения задачи информация:
ссылка1
ссылка2
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости