2016-12-14 1 views
1

이 내 데이터베이스가 어떻게 구성되어 있는지입니다으로 항목을 분할하는 외래 키의 데이터베이스를 통해 반복하기방법 섹션

메뉴

이름 (텍스트)

가격 (텍스트)

product_type_id (제품 유형 테이블에 대한 외부 키)


내가 무엇을 할 수 있기를 원하는 것은 제품 _ 테이블과 모든 존재를 통해 루프입니다 해당 제품 유형의 메뉴 테이블에있는 항목

예를 들어 product_type 테이블에 'food', 'drink'와 같은 항목이 포함될 수 있도록 항목을 여러 섹션으로 나눌 수 있습니다.

<?php 
    $result = $connection->query("SELECT * FROM menu"); 
    // print " Query returned ". $result->num_rows . " rows ";; 
    while($row = $result->fetch_assoc()) { 
?> 

    <p><? echo $row["name"]; ?></p> 
    <p><? echo $row["description"]; ?></p> 
    <p><? echo $row["price"]; ?></p> 
    <hr> 
<?php 
    }; 
?> 

누군가가 도와 드릴까요 :

이 내 코드는 않는 모든 메뉴 테이블에서 모든 항목을 얻을 수있는 지금까지입니까?

답변

1

개인적으로, 내 프로그래밍 가독성에 대해 많은입니다. 가장 큰 애완 동물 중 하나는 탭 구조 나 일관된 들여 쓰기 스타일을 사용하지 않는 코드를 잘못 작성하는 것입니다. 아래의 예에서는 연관 상품 Multidimensional Array을 사용하여 메뉴 항목을 제품 유형별로 구성한 것을 볼 수 있습니다. JOIN Syntax을 사용하여 쿼리를 구성하여 product_type_id을 사용하여 두 테이블을 결합합니다. MySQL에서 JOIN, CROSS JOININNER JOIN은 구문 상 동일합니다 (서로 바꿀 수 있음). 표준 SQL에서는 동일하지 않습니다. INNER JOINON 절과 함께 사용되며, 그렇지 않은 경우 CROSS JOIN이 사용됩니다. 메뉴 항목은 이미 쿼리에서 정렬되었습니다. 쿼리에서 결과를 정렬하지 않으면 제품 유형을 인덱스로 사용하므로 ksort()을 통해 배열을 정렬하는 것이 좋습니다. 마지막으로 우리는 HTML을 PHP에 통합하기 때문에 제어 구조에 alternative syntax을 사용하는 것이 좋습니다. 대체로 배열이 비어 있는지 확인하여 결과가 있는지 확인할 수 있습니다. 기본 텍스트는 빈 페이지보다 항상 좋습니다.

<?php 
    /* Fetch Menu Items */ 
    $menu_items = array(); 
    $sql = "SELECT `product_types`.`name` AS 'product_type', `product_types`.`description`, `menu`.`name`, `menu`.`price` FROM `menu` JOIN `product_types` ON `product_types`.`id` = `menu`.`product_type_id` ORDER BY `product_types`.`name`"; 
    $query = $connection->query($sql); 
    while($row = $query->fetch_assoc()) { 
     $menu_items[$row['product_type']][] = $row; 
    } 
?> 

<?php if(!empty($menu_items)): ?> 
    <?php foreach($menu_items as $product_type => $items): ?> 
     <h2><?php echo $product_type; ?></h2> 
     <?php foreach($items as $item): ?> 
      <p><?php echo $item['name']; ?></p> 
      <p><?php echo $item['description']; ?></p> 
      <p><?php echo $item['price']; ?></p> 
      <hr> 
     <?php endforeach; ?> 
    <?php endforeach; ?> 
<?php else: ?> 
    <p>Sorry. No menu items to display at this time. Please check back soon! 
<?php endif; ?> 
+0

귀하의 답변을 사용하여 문제를 해결하려고하지만 인쇄중인 것은 product_type뿐입니다.하지만 두 번 반복되므로 항목을 올바르게 표시 할 수 있습니다. –

+0

모든 행 이름은 정확하게 쓰여졌습니다 ... –

+0

걱정 마세요, 제가 그것을 분류했습니다. - '$ row ['name ']'을 $ item [ 'name'] (으)로 변경해야했습니다. 답변을 주셔서 감사합니다. –

0

이 시도 :

$result = $connection->query("SELECT m.name, m.price, p.id as productTypeId, p.name as productType, p.description FROM menu inner join product_types p on m.product_type_id = p.id order by p.id"); 
$productType = null; 

while($row = $result->fetch_assoc()) { 

    if ($row['productTypeId'] != $productType){ 
     $productType = $row['productTypeId']; 
     echo "<h2>$row['productType']</h2>"; 
    } 

    ?> 

    <p><? echo $row["name"]; ?></p> 
    <p><? echo $row["description"]; ?></p> 
    <p><? echo $row["price"]; ?></p> 
    <hr> 
    <?php 
}; 
+0

연관 배열에서 개체를 호출하고 있습니다. – Daerik

관련 문제