У меня есть таблица базы данных, которая выглядит так:
Business Phone City State Country Baker 12345678 CityName 1 StateName 1 CountryName 1 Mason 91834919 CityName 2 StateName 2 CountryName 1 Welder 58149918 CityName 3 StateName 1 CountryName 1 Painter 48194918 CityName 4 StateName 3 CountryName 2 Chef 95982848 CityName 5 StateName 4 CountryName 3 Vendor 96928248 CityName 1 StateName 1 CountryName 1
У меня есть этот PHP и MySQL, генерирующий неупорядоченный список на моей веб-странице:
<?$con = mysql_connect("localhost","root","testdb"); $db = mysql_select_db("table",$con); $get=mysql_query("SELECT * FROM Sheet1 ORDER BY country,state,region,city ASC"); $result = ''; while($row = mysql_fetch_assoc($get)) { $result .= "<ul class='tree'><li>" . $row['country'] . "<ul><li>" . $row['state'] . "<ul><li>" . $row['region'] . "<ul><li>" . $row['city'] . "<ul><li>" . $row['business'] . " | Phone #: " . $row['phone'] . "</li></ul></li></ul></li></ul></li></ul></li></ul>"; }?>
И это мой html:
<?php echo $result; ?>
Он выводится следующим образом:
CountryName 1 - StateName 1 * CityName 1 * Vendor | 9692824 CountryName 1 - StateName 1 * CityName 1 * Baker | 12345678 CountryName 1 - StateName 1 * CityName 3 * Welder | 58149918 CountryName 1 - StateName 2 * CityName 2 * Mason | 91834919 CountryName 2 - StateName 3 * CityName 4 * Painter | 48194918
Я бы хотел, чтобы он выводился следующим образом:
CountryName 1 - StateName 1 * CityName 1 * Vendor | 9692824 * Baker | 12345678 * CityName 3 * Welder | 58149918 - StateName 2 * CityName 2 * Mason | 91834919 CountryName 2 - StateName 3 * CityName 4 * Painter | 48194918 CountryName 3 - StateName 4 * CityName 5 * Chef | 95982848
Какие изменения я должен предпринять для этого?
Я понял, что это намного сложнее, чем то, что я в настоящее время выписал.
Прежде чем создавать список, сначала необходимо сгруппировать их (как показывает ваша структура), после чего вы можете создать список. Рассмотрим этот пример:
<?php $original_data = array(); $link = new MySQLI('localhost', 'username', 'password', 'database'); // normal select $query = mysqli_query($link, 'SELECT * FROM Sheet1 order by country, state, city'); while($row = $query->fetch_assoc()) { $original_data[] = $row; } $ordered_data = array(); foreach($original_data as $key => $value) { // group them $ordered_data[$value['country']][$value['state']][$value['city']][] = $value; } ?> <!-- print them accordingly --> <?php foreach($ordered_data as $country => $state_values): ?> <ul> <li><?php echo $country; ?></li> <?php foreach($state_values as $state => $city_values): ?> <ul> <li><?php echo $state; ?></li> <ul> <?php foreach($city_values as $city => $value): ?> <li><?php echo $city; ?></li> <ul> <?php foreach($value as $index => $element): ?> <li><?php echo $element['Business'] . ' | ' . $element['Phone']; ?></li> <?php endforeach; ?> </ul> <?php endforeach; ?> </ul> </ul> <?php endforeach; ?></li> </ul> <?php endforeach; ?>
Образец вывода
Вы выбираете все записи базы данных, поэтому она копирует все строки и представляет это вам. Вы должны дать ему правильный порядок. Посмотрите на многомерные массивы: многомерный массив PHP из результатов базы данных
После того, как вы придумали правильный порядок с правильными инструкциями if-else, он должен решить вашу проблему.