anadikt
@anadikt
Верстка как хобби

Как упростить функцию вывода данных из mysql?

На сайте методом группировки надо выводить данные из mysql (виды работ с ценами). Работы по типу относятся к группам, по которым и идет форматирование.

Таблица с ценами такая:
id title price type category_id

Таблица с категориями:
id cat_name

$db = new PDO("mysql:host=$dbhost; dbname=$dbname", $username, $password);
	$db->exec("SET NAMES utf8");
	
	//получение цен по категориям
	function get_prices_01() {
		global $db;
		$prices_01 = $db->query("SELECT * FROM `prices` WHERE category_id = '1'");
		return $prices_01;		
	}
	
	function get_prices_02() {
		global $db;
		$prices_02 = $db->query("SELECT * FROM `prices` WHERE category_id = '2'");
		return $prices_02;		
	}
	
...


вывожу пока так:

<h3>Работы группа 1</h3>
	<div class="cblock">
	<?php 
	$prices = get_prices_01();
	foreach ($prices as $price): ?>

	<div class="pricelist-row">
		<div class="service"><?php echo $price["title"]?></div>
		<div class="price">от <?php echo $price["price"]?> руб/<?php echo $price["type"]?></div>
	</div>
	<?php endforeach; ?>
	</div>

<h3>Работы группа 2</h3>
	<div class="cblock">
	<?php 
	$prices = get_prices_02();
	foreach ($prices as $price): ?>

	<div class="pricelist-row">
		<div class="service"><?php echo $price["title"]?></div>
		<div class="price">от <?php echo $price["price"]?> руб/<?php echo $price["type"]?></div>
	</div>
	<?php endforeach; ?>
	</div>

	....


Подскажите как упростить вывод данных в прайс листе ... Ну и как можно достать определенную строку?
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Два вложенных цикла решают эту проблему:

<?php

function get_categoies($pdo)
{
    $stmt = $pdo->prepare("SELECT * FROM `categories`");
    $stmt->execute();
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

function get_prices_by_category($pdo, $category_id)
{
    $stmt = $pdo->prepare("SELECT * FROM `prices` WHERE category_id = ?");
    $stmt->execute([$category_id]);
    return $stmt->fetchAll(PDO::FETCH_ASSOC);
}

$categories = get_categoies($pdo);

foreach ($categories as $category) {
	echo '<h3>'.$category['title'].'</h3>
  			<div class="cblock">';
	$prices = get_prices_by_category($pdo, $category['id']);
	foreach ($prices as $price) {
		echo '<div class="pricelist-row">
				<div class="service">' . $price["title"] . '</div>
				<div class="price">от ' . $price["price"] . ' руб/' . $price["type"] . '</div>
	  		</div>';
	}
	echo '</div>';
}


Ещё лучше использовать шаблонизатор для вывода HTML, но это уже другая история
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы