如何显示同名的多个记录?

时间:2014-02-12 14:06:24

标签: php sql

我有一个包含四个字段的数据库表。

id是我的primary key,其余字段是:餐厅的名称,地址和电话号码。现在,我有许多属于不同连锁店的餐馆,所以我使用相同的name保存了它们,并且他们的addressphone no字段看起来像这样:

这就是我的数据库的样子:

id |     name    | address  | Phone_no |

1  | restaurant1 | address1 | XXXXXX1  |
2  | restaurant1 | address2 | XXXXXX2  |
3  | restaurant1 | address3 | XXXXXX3  |
4  | restaurant2 | address1 | XXXXXX1  |
5  | restaurant2 | address2 | XXXXXX2  |
6  | restaurant3 | address1 | XXXXXX1  |
7  | restaurant4 | address1 | XXXXXX1  |

我想如何在我的页面中显示:

 |     name    | address  | Phone_no |

 | restaurant1 | address1 | XXXXXX1  |
 |             | address2 | XXXXXX2  |
 |             | address3 | XXXXXX3  |
 | restaurant2 | address1 | XXXXXX1  |
 |             | address2 | XXXXXX2  |
 | restaurant3 | address1 | XXXXXX1  |
 | restaurant4 | address1 | XXXXXX1  |


现在我想用PHP显示它,包括姓名,地址和电话号码,但名称只能显示一次

这是我的PHP代码:

    <?php
    //this is my query.
    $query = "SELECT * FROM details WHERE cat_id = $id GROUP BY name";
    $result = mysqli_query($con,$query);

    while($row = mysqli_fetch_array($result)){ 
    ?>
      <table>
         <tr>
           <td><?php echo cfirst($row['name'] ?></td>
           <td><?php echo row['address'] ?></td>
           <td><?php echo row['phone'] ?></td>
         </tr>
       </table>
   <?php } ?>


 此查询的结果:

 |     name    | address  | Phone_no |

 | restaurant1 | address1 | XXXXXX1  |
 | restaurant2 | address1 | XXXXXX1  |
 | restaurant3 | address1 | XXXXXX1  |
 | restaurant4 | address1 | XXXXXX1  |

4 个答案:

答案 0 :(得分:2)

首先你必须删除:

  $query = "SELECT * FROM details WHERE cat_id = $id";

这个小组只是删除了多个地址的餐馆地址。你必须在我的视图中用你的代码来做。

    <?php
    $last_name = '';
    while($row = mysqli_fetch_array($result)){ 
    ?>
      <table>
         <tr>
         <?php if ($last_name == ''){?>
           <td><?php echo cfirst($row['name'] ?></td>
          <?php 
                $last_name = $row['name']; 
                } elseif($last_name != $row['name']){
          ?>
           <td><?php echo cfirst($row['name'] ?></td>
          <?php }else{ ?>
           <td></td>
          <?php } ?>
           <td><?php echo row['address'] ?></td>
           <td><?php echo row['phone'] ?></td>
         </tr>
       </table>
   <?php } ?>

这将解决您的问题,只需相应调整您的HTML。

答案 1 :(得分:1)

这就是我要做的事情:

  1. 查询所有餐馆的餐桌,并按餐馆名称
  2. 查询
  3. 遍历所有记录,并在每个循环结束时,存储$last_restaurant名称
  4. 在循环中,如果$last_restaurant名称与下一个餐馆名称相同,则只显示地址和电话
  5. 在循环中,如果$last_restaurant名称与下一个餐馆名称不同,则回显所有信息
  6. Here's一个工作示例,尝试在您的代码中实现它。

答案 2 :(得分:1)

$result = mysqli_query($con,"SELECT * FROM test where cat_id = $id");

while($row = mysqli_fetch_array($result)){


$name = $row['name'];
$address = $row['address'];
$phone = $row['phone'];
?>
<doctype! html>
<head>
</head>
<body>
Name: <?php echo $name ?> <br>
Address: <?php echo $address ?><br>
Phone: <?php echo $phone ?><br><br>
</body>
</html> 
<?php
}
?>

输出:

姓名:rest1

地址:玫瑰街23号

电话:123125325

姓名:rest2

地址:23银行街

电话:24343532523

姓名:rest1

地址:25绿街

电话:53425435432

姓名:rest2

地址:54 rover street

电话:6434532

答案 3 :(得分:0)

你仍然需要从SQL中获取所有行,所以我认为这是你可以在PHP方面解决的问题。那么也许你有一个表格,其中Name列有多行,所以你有唯一的地址,但只显示一次名称?

$command = "select * from table_name";
$result = mysqli_query($link,$command);
$last = "";
$count = 0;
while($data = mysqli_fetch_assoc($result)){
    if($data['name'] == $last){
        //print table row
        ++$count;
    } else {
        //echo new <TD> cell that has rowspan="$count"
        //print table row
        $count = 0;
    $last = $data['name'];
    }
}

非常粗糙,没有测试。