2014-02-12 84 views
0

我有一個包含四個字段的數據庫表。如何顯示同名多個記錄?

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 | 
+1

你在哪裏顯示?你在while循環中運行它?顯示一些代碼 –

+0

如果您使用WHERE name ='SALT'N PEPPER',它將會出現錯誤,因爲您在PEPPER之前結束了您的查詢。使用雙引號.. WHERE name =「SALT'N PEPPER」 –

+0

你的php代碼是否迴應任何結果?因爲我在你的代碼中看到你爲while循環指定了一個條件,但是沒有用花括號括住你的結果? 「{}」至於給予餐廳的標題,只是從while循環中排除名稱作爲內容的標題。 –

回答

2

首先,你必須刪除:

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

此組是隻刪除多個address.you餐廳的地址,必須這樣做,你的代碼在我看來。

<?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。

+0

它做了很久,但謝謝。它會解決問題。 – Xitas

0

你仍然需要獲得所有的行從SQL,所以我認爲這是你可以在PHP的一面修復的東西英格斯。因此,也許你有一個名稱列跨越多行的表,這樣你有唯一的地址,但只顯示一次名稱?

$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']; 
    } 
} 

非常粗糙,沒有測試。

1

這是我會做什麼:

  1. 查詢通過的所有記錄,並在每個循環結束時,所有的餐館和秩序的餐館名稱
  2. 循環表,存儲$last_restaurant
  3. 在循環中,如果$last_restaurant的名稱與下一個餐廳名稱相同,則僅回顯地址和電話
  4. 在循環中,如果$last_restaurant名稱與下一個餐廳名稱不同,則會將所有信息和

Here's一個工作示例,嘗試在您的代碼中實現它。

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流動站街道

電話: 6434532

相關問題