私はアコーディオンのようなメニューに取り組んでいます。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>
私が抱えている問題は、エコーの 1 つの値のみであるため、ストックホルムのみがエコーされ、ルンドやその他の値はエコーされません。これはGROUP BY国が原因だと思うので、GROUP BY国と別の値にすることは可能ですか?
編集 (必要な HTML 出力):
Sweden
> Stockholm
> Lund
Germany
> Berlin
> Hamburg
DISTINCT を使用すると、出力は次のようになりますが、これは私が探しているものではありません。
Sweden
> Stockholm
Sweden
> Lund
Germany
> Berlin
Germany
> Hamburg