gpt4 book ai didi

php - 解析多行中的一列php

转载 作者:行者123 更新时间:2023-11-29 08:35:00 28 4
gpt4 key购买 nike

我有例如查询返回以下数据,每个名称都是一个项目:

id      name      comment
1 FF hey
1 FF hey back!
2 LL
3 PP i think its great!
3 PP me too
3 PP I'm not sure
4 TT
5 II
6 KK yesterday is the new tomorrow

当我显示它时,每个“项目”都有一个 id 并使用 LI 显示在 DIV 中。

正如您所看到的,虽然有时一个“项目”有多个注释,每个注释都在单独的行上

我想要做的是显示每个项目,然后在每个项目下显示评论(如果有)。因此,我无法在查询阶段按任何内容进行分组,因为评论部分是唯一的,但需要在显示阶段进行分组

目前有:

while ($row = mysql_fetch_array($result)){

echo '<li><div class=className><div class=itemName>'.$row[name].'</div>';

if($row[comment]){

echo '<div class=newRow>'.$row[comment].'</div>';

}

echo '</div></li>';

}

现在,这并不好,因为这会为同一项目生成多个显示,每个项目下有一条评论。

我可以这样做还是应该以不同的方式引入数据?

理想的结果是例如

FF             LL             PP                       etc etc etc
hey i think its great!
hey back! me too
I'm not sure

最佳答案

您可以使用GROUP_CONCAT()在您的 mysql 查询中将每个名称的所有注释分组在一起

SELECT id, name
GROUP_CONCAT(comment) AS comment
FROM table
GROUP BY name;

然后explode() php 代码中的 $row[comment]

while ($row = mysql_fetch_array($result)){

echo '<li><div class=className><div class=itemName>'.$row['name'].'</div>';

if($row['comment'] != ""){

$comments = explode(",",$row['comment']);
foreach($comments as $comment){
echo '<div class=newRow>'.$comment.'</div>';
}

}

echo '</div></li>';

}

编辑
感谢@CBroe,我现在知道 GROUP_CONCAT() 有一个 group_concat_max_len默认值为 1024。您需要在运行 GROUP_CONCAT() 查询之前增加此值 -

SET [GLOBAL | SESSION] group_concat_max_len = 10240; // must be in multiples of 1024
SELECT id, name
GROUP_CONCAT(comment) AS comment
FROM table
GROUP BY name;

您还需要了解max_allowed_packet因为这是您可以设置 var_group_concat_max_len 的限制。

注意:mysql_query()不允许多次查询,因此您需要执行2次mysql_query(),并且可以使用SET SESSION .. . 以便当前 session 中的所有查询都具有该 max_len。最好从 mysql_ 函数(已贬值)更改为 mysqli_PDO因为他们提供多种查询选项。另请查看 - http://php.net/manual/en/mysqlinfo.api.choosing.php

关于php - 解析多行中的一列php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15462408/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com