我正在制作类似手风琴的菜单。我正在尝试GROUP BY
在多个列中。我研究过,但没有运气。我将分解我当前的结构:
在我的数据库中,我有重复的country
条目和city
条目。结构看起来有点像这样(较小的例子):
| 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 |
使用GROUP BY
我可以停止循环中相同的重复VALUE
,这是我用于此的代码:
$stmt = $db->query('SELECT country FROM table GROUP BY country');
虽然这很完美。现在我想City
在我的手风琴下拉菜单中抓取并放置这些值,同时不重复这些条目。这是我当前的代码(我正在使用 bootstrap collapse 来实现手风琴效果):
<ul class="retailers-list"> // list
<?php
$stmt = $db->query('SELECT country, city FROM retailers GROUP BY country');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
$country = $row['country'];
$city = $row['city']; ?>
<li>
<a data-pjax="content" data-toggle="collapse" data-target="#<?= $country ?>" href="retailers.php?country=<?= $country ?>">
<?= $country ?></a></li> //lists all countries not repeating
<div id="<?= $country ?>" class="collapse in">
<a data-pjax="content" href="retailers.php?city=<?= $city ?>">
<?= $city ?></a><br> // listing only 1 city at a time
</div>
<? endwhile ?>
</ul>
我遇到的问题是它只回显一个值,所以它只会回显斯德哥尔摩,不会回显隆德或任何其他值。我想这是因为 GROUP BY country 造成的,那么 GROUP BY country 和另一个值是可能的吗?
编辑(所需的 HTML 输出):
Sweden
> Stockholm
> Lund
Germany
> Berlin
> Hamburg
使用 DISTINCT 输出看起来像这样,这不是我要找的:
Sweden
> Stockholm
Sweden
> Lund
Germany
> Berlin
Germany
> Hamburg