PHP Group下的sql查询标题相同

时间:2015-09-30 09:49:57

标签: php mysql

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

我有一个看起来像这样的表:

enter image description here

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

比萨饼

火腿&奶酪150美元

洋葱&奶酪$ 120

沙拉

凯撒70美元

Tomate&橄榄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>';                        
}

3 个答案:

答案 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>';
        }
    }
}

答案 1 :(得分: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>';
}

答案 2 :(得分:0)

public SummaryStatus() { InitializeComponent(); backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += backgroundWorker_DoWork; backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted; backgroundWorker.RunWorkerAsync(); } 将为每个唯一值返回1行 - 这就是您只看到1行的原因。

选项1

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

选项2

删除查询中的 void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { System.Threading.Thread.Sleep(2000); } ,使用'logic'循环显示结果,仅在菜单标题与上一个菜单标题不同时输出。