在GROUP_CONCAT中连接字符串的正确方法

时间:2018-04-05 18:50:38

标签: html mysql

我知道这一定是非常基本的,但我正在尝试查询我可以展示一个大陆,然后向所有来自该大陆的机场展示国家,到目前为止,这个查询对我有用:

$sql = "SELECT *, GROUP_CONCAT(DISTINCT ,country, SEPARATOR '')
      as country
      FROM airports
      GROUP BY continent
      ORDER BY continent, country ASC";
      if($result = mysqli_query($conn, $sql)){
          if(mysqli_num_rows($result) > 0){

              while($row = mysqli_fetch_array($result)){
                  echo "<hr>" . $row['continent'] . "" . $row['country'] . "";
              }

              // Free result set
              mysqli_free_result($result);
          } else{
              echo '<div class="autocomplete__item alert--warning"> No records matching your query were found.</div>';
          }
      } else{
          echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);
      }

它显示了大陆名称,以及其中包含一个或多个机场的每个国家/地区。所以,我需要将Country输出包含在很多HTML中。我想最好的方法是嵌套查询,但是,我已经在相同的GROUP_CONCAT声明中完成了它并且它可以工作!除了HTML中断的事实。

我将GROUP_CONCAT更改为:

GROUP_CONCAT(DISTINCT '<div class=\"push-button\"><input type=\"checkbox\"  id=\"',alpha_2,'\"><label for=\"',alpha_2,'\">',country,'</label></div>' SEPARATOR '')

技术上有效,但它在某些时候打破了标记:

<div class="push-button">
     <input type="checkbox"  id="bm">
     <label <hr>Asia<div class="push-button"><input type="checkbox"  id="cn"><label for="cn">China</label></div>

或者最后一行:

<div class="p    </section>

在56个国家/地区发生了大约5到6次。

可能我应该嵌套查询,不确定并且不确定如何做,但是......这不是很奇怪或者我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

TL; DR:

SET SESSION group_concat_max_len = 10000;

好的,解决了。问题不在于GROUP_CONCAT制动标记,它发生了它有一个最大值,默认为1024(我发现用MySQL Workbench进行测试)。

所以我在这里找到了一个解决方案:In MySQL, is it possible to get more than 1024 characters back from GROUP_CONCAT