1

我正在从 MYSQL 中提取数据并使用 GROUP_CONCAT 和 AS。

<ul class="retailers-list">
<?  
$query = "SELECT id, country, group_concat(DISTINCT city SEPARATOR '<br>') AS city, country FROM retailers GROUP BY country";
$stmt = $db->query($query);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
?>
<li>
<a href="search.php?country=<?= $row['country']; ?>"><?= $row['country']; ?></a>
<br>
<a href="search.php?city=<?= $row['city']; ?>">
<?= $row['city']; ?></a> //group_concat / AS
</li>   
<?  endwhile ?>     
</ul>

问题是输出是一个链接。它似乎将所有城市值分组到 $row['city']; 中。如何让每个城市拥有自己的唯一链接,我需要使用 group_concat 和 AS 并为每个城市提供自己唯一的 URL。

相关文章:列表问题,GROUP mysql

4

2 回答 2

1

简而言之,您应该使用最简单的查询:

SELECT id, country, city FROM retailers GROUP BY country ORDER BY country

请注意,您没有按国家/地区对结果进行排序,根据您的问题,这似乎是必须的。

然后你基本上执行(我认为用英语称为a)流控制切割。也就是说,您将得到如下结果:

国家 | 城市
----------+-------------
阿根廷 | 拉普拉塔
阿根廷 | 布宜诺斯艾利斯
美国 | 纽约
美国 | 洛杉矶
巴西 | 圣保罗

所以你基本上需要 2 个循环(每个嵌套级别一个)。一个用于区分国家,一个用于输出一个国家的所有不同城市。在伪 php 代码中:

row = get_next_result
while (row) {           // while there are still elements to be fetched
  current_country = row[country]
  while (row && current_country == row[country]) {
    output current_country and row[city]
    row = get_next_result
  }
}

我把 PHP 的翻译留给你……但这是 99% 的工作:P

于 2013-10-28T17:44:31.410 回答
1

这是我的解决方案!解决了!

<ul class="retailers-list">
<?  
$query = "SELECT id, country, group_concat(DISTINCT city) AS city, country FROM retailers GROUP BY country";
$stmt = $db->query($query);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) :
?>
<li>
<a data-pjax="content" data-toggle="collapse" data-target="#<?= $row['id']; ?>" href="retailers.php?country=<?= $row['country']; ?>">
<?= $row['country']; ?></a>


<div id ="<?= $row['id']; ?>" class="collapse in">
<?php 
  $cities = explode(',',$row['city']);
  foreach ($cities as $city) {
?>
    <a data-pjax="content" href="retailers.php?city=<?= $city ?>"><?= $city; ?></a><BR>
<?php
  }
?>
</div>
</li> 
<?  endwhile ?> 
于 2013-10-28T15:09:37.797 回答