Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我想在另一个下方显示餐厅名称及其各自的食品名称_Php_Mysql - Fatal编程技术网

Php 我想在另一个下方显示餐厅名称及其各自的食品名称

Php 我想在另一个下方显示餐厅名称及其各自的食品名称,php,mysql,Php,Mysql,我有两个表“餐馆”有列(id、Rname、电子邮件)和“食品项目”有列(id、项目名称、项目价格、Rname)。现在我想开发一个页面,在其中所有的餐厅和他们各自的食物项目将显示。如下图所示: Restaurant Name1: item 1 item 2 item 3 我为此做了很多尝试,但我没有得到我想要的东西。 我写了一个sql查询,显示餐厅名称,然后是他们的商品名称,但没有给出确切的信息 <?php $sql1 = "SELECT DISTINCT mi.item_name, m

我有两个表“餐馆”有列(id、Rname、电子邮件)和“食品项目”有列(id、项目名称、项目价格、Rname)。现在我想开发一个页面,在其中所有的餐厅和他们各自的食物项目将显示。如下图所示:

Restaurant Name1:
item 1
item 2
item 3
我为此做了很多尝试,但我没有得到我想要的东西。 我写了一个sql查询,显示餐厅名称,然后是他们的商品名称,但没有给出确切的信息

<?php

$sql1 = "SELECT DISTINCT mi.item_name, mi.item_price, mi.veg_nonveg, rs.Rname FROM menu_items AS mi LEFT JOIN restaurants AS rs ON mi.Rname=rs.Rname";

    $result1 = mysqli_query($conn,$sql1);
    if(mysqli_num_rows($result1)){
    foreach ($result1 as $rows) {
    echo "<br>" . $rows['item_name'] . " " . $rows['item_price'] . " " . 
    $rows['Rname'];
    }
    }
预期结果:

ABC:
Chicken curry 105
veg fried rice 101
veg momos 50

xyz:
veg fried rice 100

您可以通过
php
,而不是通过
sql
来实现这一点:

例如,如果从数据库接收到的数据如下:

$data = [
    ['Rname' => 'Restaurant 1', 'item_name' => 'foo', 'item_price' => '354631', 'veg_nonveg' => 'veg'],
    ['Rname' => 'Restaurant 1', 'item_name' => 'bar', 'item_price' => '234631', 'veg_nonveg' => 'veg'],
    ['Rname' => 'Restaurant 2', 'item_name' => 'foo', 'item_price' => '334234', 'veg_nonveg' => 'non-veg'],
    ['Rname' => 'Restaurant 2', 'item_name' => 'bar', 'item_price' => '45353', 'veg_nonveg' => 'non-veg'],
];
您可以这样做:


// To print restaurant name only once in a group we need to store the 
// already printed restaurant somewhere.

$restaurant = ''; // declared this variable to store current restaurant.

foreach ($data as $row) {

    // checking if current restaurant is already printed. 
    if ($restaurant != $row['Rname']) {
        //if current restaurant is not printed then we will print new one and store new restaurant.
        $restaurant = $row['Rname'];
        echo $row['Rname'] . "\r\n";
    }

    // here we are doing the regular stuff.
    echo $row['item_name']. ' ' .$row['item_price']. ' ' . $row['veg_nonveg']. "\r\n";
}
检查此处的工作示例:

编辑

另一种方式:

例如,我们有两个表:

作者:
+----+------+-------------+
|id |名称|描述|
+----+------+-------------+
|1 | abc | som|
|2 |定义|说明|
|3 | ghi |这里|
+----+------+-------------+
书:
+----+------+------+-----------+
|id |姓名|年份|作者| id|
+----+------+------+-----------+
|1 | ijk | 1990 | 1|
|2 | lmn | 1991 | 1|
|3 | opq | 1995 | 2|
|4 | rst | 1996 | 2|
|5 | uvw | 2000 | 3|
|6 | xyz | 2001 | 3|
+----+------+------+-----------+
获取数据的最简单方法是运行两个
sql
查询:

首次获取作者:

从作者中选择*;
然后根据作者的身份证取书:

从作者id所在的书中选择*(1,2,3);
现在要按组打印作者的书籍,我们可以按
作者id
打印书籍:

foreach ($authors as $author) {
    echo $author['name'] . "\r\n";

    foreach ($books as $book) {
        if ($book['id'] == $author['author_id']) {
            echo $book['name']. ' ' .$book['year']. "\r\n";
        }
    }
}

虽然我们在这里运行两个查询,但这是一种更干净的数据管理方式。在实现分页时,它还使事情变得更容易。

您好,您可以在查询中进行如下更改。试试这个,希望有帮助

$sql1 = "SELECT concat(GROUP_CONCAT(mi.item_name, mi.item_price),'"<br>"') as name_price, mi.veg_nonveg, rs.Rname FROM menu_items AS mi JOIN restaurants AS rs ON mi.Rname=rs.Rname group by rs.Rname";

 $result1 = mysqli_query($conn,$sql1);
    if(mysqli_num_rows($result1)){
     foreach ($result1 as $rows) {
       echo $rows['Rname']."<br>" . $rows['name_price'];
     }
    }
$sql1=“从菜单中选择concat(GROUP_concat(mi.item_name,mi.item_price),“
”)作为name_price,mi.veg_noveneg,rs.Rname作为mi加入餐厅作为rs ON mi.Rname=rs.Rname按rs.Rname分组”; $result1=mysqli\u查询($conn,$sql1); if(mysqli_num_行($result1)){ foreach($result1作为$rows){ echo$rows['Rname']。“
”$rows['name\u price']; } }
如果一家餐厅提供3种以上的食物,该怎么办?我看不到任何按餐厅进行分组的努力。餐厅可以提供任意数量的食物,实际上还有一个页面,餐厅可以在其中添加食物。我对PHP不太有经验,所以我需要您的帮助,我就是这么做的。你可以对查询中的项目进行分组,按餐厅分组,或者根据查询结果构建一个php结构,将每个餐厅的项目重新分组。我想推荐latterHi gaurav,谢谢你的帮助。我尝试了你的代码,但只解决了一个prblm(这不是重复餐厅名称,而是重复商品名称和价格。例如:abc素食Momos50、咖喱鸡105、素食炒饭101、素食炒饭101、素食Momos50、鸡肉咖喱105名称素食炒饭100Hi Aakash,非常感谢您的帮助。它按预期工作。我有一个小要求,您能解释一下代码吗?
$sql1 = "SELECT concat(GROUP_CONCAT(mi.item_name, mi.item_price),'"<br>"') as name_price, mi.veg_nonveg, rs.Rname FROM menu_items AS mi JOIN restaurants AS rs ON mi.Rname=rs.Rname group by rs.Rname";

 $result1 = mysqli_query($conn,$sql1);
    if(mysqli_num_rows($result1)){
     foreach ($result1 as $rows) {
       echo $rows['Rname']."<br>" . $rows['name_price'];
     }
    }