gpt4 book ai didi

php - 按列值对数组中的 mysql 行进行分组

转载 作者:行者123 更新时间:2023-11-29 01:52:33 25 4
gpt4 key购买 nike

我有一个这种格式的mysql表

Mysql table format
_______________________________
| column1 | column2 | column3 |
|_________|_________|_________|
| A | val Z | val Y |
|_________|_________|_________|
| A | val X | val W |
|_________|_________|_________|
| A | val V | val U |
|_________|_________|_________|
| B | val T | val S |
|_________|_________|_________|
| B | val R | val Q |
|_________|_________|_________|
| C | val P | val O |
|_________|_________|_________|

我需要做的是返回数组中 column1 中每个值出现的所有行。该数组可能是这样的:

$A = array($row1,$row2,$row3);

$row1 = array("column1"=>"A", "column2"=>"val Z", "column3"=>"val Y",);

$row2 = array("column1"=>"A", "column2"=>"val X", "column3"=>"val W",);

$row3 = array("column1"=>"A", "column2"=>"val V", "column3"=>"val V",);

希望我说得够清楚了。基本上,我需要按 column1 中值的唯一性对行进行分组。

mysql 结果应该包含如上所述分组的数组中的所有行。像这样:

$result = array($A, $B, $C);

我需要对输出做的是将其显示在表格中。如果有更好的方法,请告诉我。我希望表格采用这种格式:

_________________________________________________
| Header1 | Header2 | Header3 | Header4 |
|___________|___________|___________|___________|
| A | val Y | val W | val U |
|___________|___________|___________|___________|
| B | val S | val Q | |
|___________|___________|___________|___________|
| C | val O | | |
|___________|___________|___________|___________|

这是我唯一能想到的办法。如果有更好的方法,请告诉我。感谢您的帮助。

最佳答案

假设您希望显示表中的column3 数据,解决方案如下:

更改您的查询

SELECT * FROM table;

SELECT column1, GROUP_CONCAT(column3 SEPARATOR ',') as column3 
FROM table
GROUP BY column1
ORDER BY COUNT(column1) DESC

执行查询并按照以下步骤操作,

  1. 从结果集中构造一个关联数组。
  2. 从关联数组中提取键。
  3. 统计表中的列数,最后
  4. 建表

代码如下:

$sql = "SELECT column1, GROUP_CONCAT(column3 SEPARATOR ',') as column3 FROM table_name GROUP BY column1 ORDER BY COUNT(column1) DESC";
$result_set = mysqli_query($conn, $sql);

// construct an associative array
$result_array = array();
while($row = mysqli_fetch_assoc($result_set)){
$result_array[$row['column1']] = explode(",", $row['column3']);
}

// extract the keys from the associative array
$result = array_keys($result_array);

// count the number of columns in the table
$len = count($result_array[$result[0]]);

// construct the table
echo '<table border="1">';

// display table headings
echo '<tr>';
for($i = 1; $i <= $len + 1; ++$i){
echo '<th>Header' . $i . '</th>';
}
echo '</tr>';

// display table contents
foreach($result as $k){
echo '<tr>';
echo '<td>' . $k . '</td>';
for($i = 0; $i < $len; ++$i){
echo '<td>';
echo isset($result_array[$k][$i]) ? $result_array[$k][$i] : '';
echo '</td>';
}
echo '</tr>';
}

echo '</table>';

输出:

enter image description here


注意:如果你想查看$result_array数组的结构,执行var_dump($result_array);

关于php - 按列值对数组中的 mysql 行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37737525/

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