我正在研究类似菜单的手风琴。我正在尝试GROUP BY
多栏。我已经研究过,但没有运气。我将打破我目前的结构: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
,并将手风琴中的值放下,同时不要重复这些条目。这里是我当前的代码(我用引导崩溃手风琴效果):
<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国家造成的,所以GROUP BY国家和另一个价值可能吗?
EDIT(所需的HTML输出):
Sweden
> Stockholm
> Lund
Germany
> Berlin
> Hamburg
使用DISTINCT输出这个样子的,这不是我所期待的:
Sweden
> Stockholm
Sweden
> Lund
Germany
> Berlin
Germany
> Hamburg
我不知道你想达到什么。你能显示所需的HTML输出吗? – SirDarius
在没有任何聚合函数的情况下,使用GROUP BY是不恰当的(并且很可能是低效的)。改用DISTINCT运算符。 – Strawberry
@Strawberry请参阅编辑,谢谢 – SethCodes