同一标题下的PHP组sql查询

同一标题下的PHP组sql查询,php,mysql,Php,Mysql,我正在尝试做一个餐厅网站,人们可以看到菜单 我有一张这样的桌子: 现在我想根据标题输出这些数据: <?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_produc

我正在尝试做一个餐厅网站,人们可以看到菜单

我有一张这样的桌子:

现在我想根据标题输出这些数据:

<?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>';
        }
    }

?>
比萨饼

火腿奶酪150美元

洋葱奶酪120美元

沙拉

凯撒70美元

番茄和橄榄60美元

甜点

冰淇淋110美元

香草蛋糕90美元

-

在将来,客户可以更改菜单标题。。。这意味着还需要从数据库中检索标题

以下是我正在尝试的代码,但我不知道如何在标题下添加内容:

<?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

有什么想法吗

编辑

我得到了两个正确答案:

选择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>';
        }
    }
}
$sql\u product=“从cc\u餐厅菜单中选择*,其中菜单\u asoc='$asoc'和菜单\u type='product';
$stmt\u product=$conn->prepare($sql\u product);
$stmt_产品->执行();
$result\u product=$stmt\u product->setFetchMode(PDO::FETCH\u ASSOC);
如果($result\u product>0){
而($row=$stmt\u product->fetch()){
$menuArr[$row['menu\U title']][=''。$row['menu\U product'].''.$row['menu\U product\U price'.].'.$row['menu\U product\U desc'.

'; } foreach($menuArr作为$menuTitle=>$productArr){ 回显“.$menuTitle.”
; foreach($productArr as$key=>$productname){ 回显“”.$productname.

”; } } }
选择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>';                        
}
$sql\u product=“从cc\u餐厅菜单中选择*,其中菜单\u asoc='$asoc'和菜单\u type='product'按菜单标题订购”;
$stmt\u product=$conn->prepare($sql\u product);
$stmt_产品->执行();
$result\u product=$stmt\u product->setFetchMode(PDO::FETCH\u ASSOC);
$title=“”;
而($row=$stmt\u product->fetch()){
如果($row['menu_title']!=$title){
回显'.$row['menu_title'].
'; $title=$row['menu_title']; } 回显“”.$row[“菜单产品”]。

”.$row[“菜单产品价格”]。

”; }
GROUP BY
将为每个唯一值返回一行-这就是为什么您只看到一行

选项1

使用此查询仅输出“菜单标题”,将菜单标题传递给循环内的第二个查询,以返回与菜单标题匹配的行

选项2

删除查询中的“分组依据”,使用“逻辑”循环搜索结果,仅当菜单标题与以前的菜单标题不同时才输出该菜单标题。

我更愿意这样做: 只需<代码>选择*。。。按菜单标题排序,然后用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>';
}
$title=”“;
而($row=$stmt\u product->fetch()){
如果($row['menu_title']!=$title)
回显'.$row['menu_title'].
'; $title=$row['menu_title']; 回显“”.$row[“菜单产品”]。

”; }
请试试这个

$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>';
        }
    }
}
$sql\u product=“从cc\u餐厅菜单中选择*,其中菜单\u asoc='$asoc'和菜单\u type='product';
$stmt\u product=$conn->prepare($sql\u product);
$stmt_产品->执行();
$result\u product=$stmt\u product->setFetchMode(PDO::FETCH\u ASSOC);
如果($result\u product>0){
而($row=$stmt\u product->fetch()){
$menuArr[$row['menu\U title']][=$row['menu\U product']。”.$row['menu\U price'];
}
foreach($menuArr作为$menuTitle=>$productArr){
回显“.$menuTitle.”;
foreach($productArr as$key=>$productname){
回显“”.$productname.

”; } } }
如果您的代码正常工作,您是否需要将
分组依据
更改为
排序依据
如果您的代码正常工作,您是否可以将一个答案作为正确答案,或者将您的答案添加为正确答案,以便下一个有相同问题的人可以知道要查看哪个答案?这非常有效!!我仍然不太明白如何添加我的html和其他变量,但它确实有用。为什么要编写

?我最近经常看到这种情况!这是从哪里来的?为什么你认为这是正确的?@dhi\m这并没有回答我的问题。我想知道突然涌入的

是从哪里来的。大约在上周才开始。一定有来源!一些教科书或者有打字错误的东西!我需要知道它是什么,并从源头上消除这个问题@李斯特先生错了