这是 Mysql
表的模型示例:
| ID | Country | City |
________________________________
| 1 | Sweden | Stockholm |
| 2 | Sweden | Stockholm |
| 3 | Sweden | Lund |
| 4 | Sweden | Lund |
| 5 | Germany | Berlin |
| 6 | Germany | Berlin |
| 7 | Germany | Hamburg |
| 8 | Germany | Hamburg |
请注意 Country
和 city
行中如何有重复的值。
在我的 PDO 查询中使用GROUP BY Country, City
,这些值在循环
中不会重复。这是用于此目的的 PDO:
$query = "SELECT id, city, country FROM table GROUP BY country, city";
$stmt = $db->query($query);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
上面的代码将产生这样的输出(中间进行一些编辑)。 GROUP BY
有效,但 country
重复:
Sweden - Stockholm
Sweden - Lund
Germany - Berlin
Germany - Hamburg
使用 Bootstrap 折叠和上面的代码,我通过一个简单的下拉折叠将国家
与城市
分开。这是代码:
<li>
<a data-toggle="collapse" data-target="#<?= $row['id']; ?>"
href="search.php?country=<?= $row['country']; ?>">
<?= $row['country']; ?>
</a>
<div id ="<?= $row['id']; ?>" class="collapse in"> //collapse div here
<a href="search.php?city=<?= $row['city']; ?>">
<?= $row['city']; ?><br></a>
</div> //end
</li>
它看起来像这样(一旦开始崩溃):
Sweden
> Stockholm
Sweden
> Lund
Germany
>Berlin
Germany
>Hamburg
这就是我遇到问题的地方。上面列出了值 Sweden
和 Germany
2 次。我希望瑞典
和德国
只列出一次,以及下面列出的城市,所以所需的外观是这样的:
Sweden // Lists one time
> Stockholm
> Lund
Germany // Lists one time
>Berlin
>Hamburg
我尝试过使用DISTINCT、GROUP_CONTACT
和其他方法,但没有一个得到我想要的输出(上面)。建议?以下是我当前的完整代码:
<?
$query = "SELECT id, city, country FROM table GROUP BY country, city";
$stmt = $db->query($query);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
?>
<li>
<a data-toggle="collapse" data-target="#<?= $row['id']; ?>"
href="search.php?country=<?= $row['country']; ?>">
<?= $row['country']; ?>
</a>
<div id ="<?= $row['id']; ?>" class="collapse in"> //collapse div here
<a href="search.php?city=<?= $row['city']; ?>">
<?= $row['city']; ?><br></a>
</div> //end
</li>
<? endwhile ?>
最佳答案
所以,正如所讨论的,你的 mysql 结果不是问题。你有一些逻辑需要改变。 我没有要检查的环境,如果不起作用,请告诉我。
$currCountry = "";
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
?>
<li>
<?if ( $currCountry != $row['country'] ) {?>
<a data-toggle="collapse" data-target="#<?= $row['id']; ?>"
href="search.php?country=<?= $row['country']; ?>">
<?= $row['country']; ?>
</a>
<?
}
$currCountry = $row['country'];
?>
<div id ="<?= $row['id']; ?>" class="collapse in"> //collapse div here
<a href="search.php?city=<?= $row['city']; ?>">
<?= $row['city']; ?><br></a>
</div> //end
</li>
<? endwhile ?>
关于php - 列表问题,GROUP mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626632/