2015-09-30 3 views
2

Я пытаюсь сделать сайт ресторана, где люди могут видеть меню.PHP Group sql query под тем же названием

У меня есть таблица, которая выглядит следующим образом:

enter image description here

А теперь я хочу, чтобы вывести эти данные в соответствии с названием:

Пицца

Ham & Сыр $ 150

Лук & Сыр $ 120

салат

Цезарь $ 70

Томат & Оливки $ 60

Десерт

Мороженое $ 110

Ванильный торт $ 90

-

Ну в будущем menu_title может быть изменен клиентом ... Это означает, что заголовок должен быть получен также из базы данных.

Вот код, я пытаюсь, но я не знаю, как добавить содержание под заглавие:

<?PHP 
    $sql_product="SELECT * FROM cc_restaurants_menu WHERE menu_asoc='$asoc' AND menu_type='product' GROUP BY menu_title"; 
    $stmt_product = $conn->prepare($sql_product); 
    $stmt_product->execute();   
    $result_product = $stmt_product->setFetchMode(PDO::FETCH_ASSOC); 

    if($result_product > 0) { 
     while($row = $stmt_product->fetch()) { 
      echo '<h3>'. $row['menu_title'] .'</h3><br><p>'. $row['menu_product'] .'</p>'; 
     } 
    } 

?> 

Но этот код выводится только заголовок и первый ряд: S

Любая идея?

EDIT

Я получил 2 ответ правильный:

ВАРИАНТ 1

$sql_product="SELECT * FROM cc_restaurants_menu WHERE menu_asoc='$asoc' AND menu_type='product'"; 
$stmt_product = $conn->prepare($sql_product); 
$stmt_product->execute();   
$result_product = $stmt_product->setFetchMode(PDO::FETCH_ASSOC); 

if($result_product > 0) { 
    while($row = $stmt_product->fetch()) { 
     $menuArr[$row['menu_title']][] = '<p>'. $row['menu_product'] . ''. $row['menu_product_price'] . ''. $row['menu_product_desc'] .'</p>'; 
    } 

    foreach($menuArr as $menuTitle => $productArr){ 
     echo '<h3>'. $menuTitle .'</h3></br>'; 
     foreach($productArr as $key =>$productname){ 
     echo '<p>'. $productname .'</p>'; 
     } 
    } 
} 

ВАРИАНТ 2

$sql_product="SELECT * FROM cc_restaurants_menu WHERE menu_asoc='$asoc' AND menu_type='product' ORDER BY menu_title"; 
$stmt_product = $conn->prepare($sql_product); 
$stmt_product->execute();   
$result_product = $stmt_product->setFetchMode(PDO::FETCH_ASSOC); 

$title = ""; 
while ($row = $stmt_product->fetch()) { 
    if ($row['menu_title'] != $title) { 
     echo '<h3>'.$row['menu_title'].'</h3><br>'; 
     $title = $row['menu_title']; 
    } 
    echo '<p>'.$row['menu_product'].'</p><p>'.$row['menu_product_price'].'</p>';       
} 

ответ

0

GROUP BY вернет 1 строку для каждого уникального значения - которые почему вы только видите 1 строка.

Вариант 1

Используйте этот запрос для вывода «Меню Названия» только, проходя заголовок меню на второй запрос внутри цикла, для возврата строки, соответствующей заголовок меню.

Вариант 2

Удалить GROUP BY в запросе, Переберите результаты с помощью «логики» для вывода только заголовок меню, если оно отличается от предыдущего заголовка меню.

1

я предпочел бы делать это: Просто SELECT * ... ORDER BY menu_title, а затем отсортировать его в PHP:

$title = ""; 
while ($row = $stmt_product->fetch()) { 
    if ($row['menu_title'] != $title) 
    echo '<h3>'.$row['menu_title'].'</h3><br>'; 
    $title = $row['menu_title']; 
    echo '<p>'.$row['menu_product'].'</p>'; 
} 
+0

не могли бы вы должны изменить 'GROUP BY' для' ORDER BY' – MaggsWeb

+0

Вы правы, и я пропустил ';' –

+0

работает !! Спасибо друг! –

2

Пожалуйста, попробуйте это

$sql_product="SELECT * FROM cc_restaurants_menu WHERE menu_asoc='$asoc' AND menu_type='product'"; 
$stmt_product = $conn->prepare($sql_product); 
$stmt_product->execute();   
$result_product = $stmt_product->setFetchMode(PDO::FETCH_ASSOC); 

if($result_product > 0) { 
    while($row = $stmt_product->fetch()) { 
     $menuArr[$row['menu_title']][] = $row['menu_product'] . " ".$row['menu_price']; 

    } 

    foreach($menuArr as $menuTitle => $productArr){ 
     echo '<h3>'. $menuTitle .'</h3>'; 
     foreach($productArr as $key =>$productname){ 
     echo '<p>'. $productname .'</p>'; 
     } 
    } 
} 
+0

, это работает отлично! Все еще не понимаю, как я могу добавить свой html и другие переменные, которые у меня были, но действительно полезен –

+0

Почему вы пишете '
'? Я так часто вижу в последнее время! Откуда это происходит? Почему, по-вашему, это правильно? –

+0

@Mr Lister отредактировал мой ответ –

Смежные вопросы