我正在尝试做一个人们可以看到菜单的餐厅网站。
我有一个看起来像这样的表:
现在我想根据标题输出这些数据:
比萨饼
火腿&奶酪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>';
}
答案 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'循环显示结果,仅在菜单标题与上一个菜单标题不同时输出。