簡體   English   中英

PHP Group下的sql查詢標題相同

[英]PHP Group sql query under the same title

我正在嘗試做一個人們可以看到菜單的餐廳網站。

我有一個看起來像這樣的表:

在此輸入圖像描述

現在我想根據標題輸出這些數據:

比薩

火腿和奶酪150美元

洋蔥和奶酪120美元

沙拉

凱撒70美元

Tomate&Olives $ 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

任何的想法?

編輯

我得到了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>';                        
}

請試試這個

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

我更喜歡這樣做:只需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>';
}

GROUP BY將為每個唯一值返回1行 - 這就是您只看到1行的原因。

選項1

使用此查詢僅輸出“菜單標題”,將菜單標題傳遞給循環內的第二個查詢,以返回與菜單標題匹配的行。

選項2

在查詢中刪除GROUP BY ,使用“logic”循環結果,僅在與上一個菜單標題不同的情況下輸出菜單Title。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM