Правильный способ объединения строк в GROUP_CONCAT

0

Я знаю, что это должно быть довольно просто, но я пытаюсь сделать запрос, где я могу показать континент, а затем показать все страны с аэропортом с этого континента, до сих пор этот запрос работает для меня:

$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);
      }

Он показывает название континента и каждую страну в нем с одним или несколькими аэропортами. Итак, мне нужно, чтобы эта страна была окружена большим количеством 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>

Это происходит примерно в 5-6 раз в 56 странах.

Вероятно, я должен вложить запросы, не уверен и не уверен, как это сделать, но... Разве это не странно, или я чего-то не хватает?

Теги:

1 ответ

0

TL; DR:

SET SESSION group_concat_max_len = 10000;

Хорошо, решил. Проблема заключалась не в том, что GROUP_CONCAT тормозит разметку, бывает, что она имеет максимальное значение, по умолчанию 1024 (я обнаружил, что делал тест с MySQL Workbench).

Поэтому я нашел решение здесь: в MySQL можно вернуть более 1024 символов из GROUP_CONCAT

Ещё вопросы

Сообщество Overcoder
Наверх
Меню