我知道这一定是非常基本的,但我正在尝试查询我可以展示一个大陆,然后向所有来自该大陆的机场展示国家,到目前为止,这个查询对我有用:
$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次。
可能我应该嵌套查询,不确定并且不确定如何做,但是......这不是很奇怪或者我错过了什么吗?
答案 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