![](/img/trans.png)
[英]Combine Terms under same Title, unless new = create new Title Wordpress Query
[英]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.