2014-02-12 4 views
0

У меня есть таблицы базы данных, содержащие четыре поля.Как показать несколько записей с тем же именем?

id - мой primary key, а остальные поля: имя, адрес и номер телефона ресторана соответственно. Теперь у меня есть много ресторанов, принадлежащих к разным цепочкам, так что я спас их, используя тот же name и их address и phone 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, но не заключили ваш результат с фигурными фигурными скобками? "{}« Что касается предоставления заголовка для restuarant, просто исключите имя из цикла 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 ь. Возможно, у вас есть таблица с столбцом 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']; 
    } 
} 

Очень грубо, не испытал.

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 Rose Street

Телефон: 123125325

Имя: rest2

Адрес: 23 банка ул

Телефон: 24343532523

Имя: rest1

Адрес: 25 зеленая улица

Телефон: 53425435432

Имя: rest2

Адрес: 54 ровер улица

Телефон: 6434532

Смежные вопросы