同一标题下的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这并没有回答我的问题。我想知道突然涌入的
是从哪里来的。大约在上周才开始。一定有来源!一些教科书或者有打字错误的东西!我需要知道它是什么,并从源头上消除这个问题@李斯特先生错了