Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 组_concat问题,需要唯一_Php_Mysql_Pdo - Fatal编程技术网

Php 组_concat问题,需要唯一

Php 组_concat问题,需要唯一,php,mysql,pdo,Php,Mysql,Pdo,我从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 =

我从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>

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

    <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 ?> 
    

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

      SELECT id, country, city FROM retailers GROUP BY country ORDER BY country
      
      请注意,您没有按国家排序结果,根据您的问题,这似乎是必须的

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

      Country | City ----------+------------- Argentina | La Plata Argentina | Buenos Aires USA | New York USA | Los Angeles Brazil | Sao Paulo
      我把PHP的翻译留给你。。。但这是99%的工作:P

      从零售商组中逐个城市选择id、国家/地区和城市
      <代码>
    @Fred ii-它就像一种珍贵的药物,我坚持了三天,然后终于起作用了!我喜欢代码的原因就是因为这种感觉。我知道你的意思,我也在上周花了三天左右的时间,想弄明白一些事情。当事情得到解决/实现时,确实是一种很好的感觉。1) GROUP_CONCAT在可连接的结果数量上有限制。你应该检查文档2)你在处理不必要的数据,因为你是第一次内爆,然后爆炸,这是没有意义的3)你是混合数据与它的表现。例如:如果在
    城市
    字段的值中添加逗号
    ,会发生什么情况?@SethCodes我相信您可以将自己的答案标记为已接受,为了结束问题,干杯。@MostyMostacho感谢您的提示!非常感谢。你在这里的做法是什么?我已经看过了这些文件,但仅限于最深层的内容。
    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
      }
    }