如何使用如下所示的php格式化sql server行:
id company value monthyear
1 companyone 30 january2012
2 companytwo 20 february2012
3 companyone 10 february2012
进入这个:
monthyear: ['january2012', 'february2012']
和此:
company: 'companyone', value: [30, 10]
company: 'companytwo', value: [0, 20]
数据库中每个月的一个实例合并为一个实例。
公司1,有两行,合并为一个实例,每个值按月排列。公司二,只有一个实例,它的值定义为0,一个月内没有实例。
我得到的最远的是带有array_merge_recursive和一些条件语句的两个二维数组,但后来我的头进入了结。
答案 0 :(得分:2)
SELECT
company,
GROUP_CONCAT(value SEPARATOR ',') AS value,
GROUP_CONCAT(monthyear SEPARATOR ',') AS monthyear
FROM
yourTable
GROUP BY
company
GROUP_CONCAT
的一些参考。
PHP解决方案:
选择要分组的属性(公司)。每次遇到公司的不同价值时,循环遍历它们并打开一个新组。只要当前行与上一行具有相同的行,就可以将value
和monthyear
添加到当前公司。
即使没有排序,你也可以这样做:
while($row = mysql_fetch_assoc($resource))
{
$values[$row["country"]][] = $row["value"];
$monthyear[$row["country"]][] = $row["monthyear"];
}
一些输出示例
foreach ($values as $country => $valuesOneCountry)
{
// each country
var_dump($country);
foreach ($valuesOneCountry as $i => $value)
{
// value, monthyear for each original row
var_dump($value, $monthyear[$country][$i]);
}
}
使用OOP的优雅方式:
class Tuple
{
public $country, $values, $monthyears;
public function __construct($country, $values = array(), $monthyears = array())
{
$this->country = $country;
$this->values = $value;
$this->monthyears = $monthyears;
}
}
$tuples = array();
while($row = mysql_fetch_assoc($resource))
{
if (!isset($tuples[$row["country"]]))
$tuples[$row["country"]] = new Tuple($row["country"]);
// save reference for easy access
$tuple = $tuples[$row["country"]];
// or some method like $tuple->addValue($row["value"]);
$tuple->values[] = $row["value"];
$tuple->monthyears[] = $row["monthyear"];
}
var_dump($tuples);