我想提取一些数据并创建一个csv文件。这就是我的属性表的样子。你可以在图片中看到它: HERE
这是我的代码,我尝试过:
$select = mysql_query("select * from attributes");
$final ="";
$i = 0;
while($row = mysql_fetch_array($select)) {
$id_produs = $row['id_produs'];
$n_attr = $row['nume_attr'];
$val = $row['val_attr'];
$final .= $id_produs . "%%" . $val . "%%";
$csv_array_attributes[$i] = $final;
$i++;
}
这是我创建CSV文件时的部分:
$file = fopen("attributes.csv", "w+");
foreach ($csv_array_attributes as $line) {
fputcsv($file, explode('%%', $line), "^", "`");
}
fclose($file);
这将是想要的结果:HERE。因此,nume_attr
应该是csv中每列的标题,val_attr
应该是每个nume_attr
的值(参见图片)。
我尝试了很多方法但是我没有从图像中得到这个结果。我必须提到我的表"属性"有超过74000行。
这是表结构:
CREATE TABLE `attributes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_produs` text NOT NULL,
`nume_attr` text NOT NULL,
`val_attr` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=673912 DEFAULT CHARSET=latin1;
答案 0 :(得分:0)
/*Try following code */
$select = mysql_query("select * from attributes");
$i = 0;
$csv_array_attributes[$i]=array('sku','manufacturer_article','manufacturer');
$i++;
while($row = mysql_fetch_array($select)) {
$csv_array_attributes[$i] =array('sku'=>$row['id_produs'],'manufacturer_article'=>$row['nume_attr'],'manufacturer'=>$row['val_attr']);
$i++;
}
$file = fopen("attributes.csv", "w+");
foreach ($csv_array_attributes as $line) {
fputcsv($file,$line);
}
fclose($file);
答案 1 :(得分:0)
让我们假设速度不是这里的问题,也不是并发性,即你现在只想要结果,无论解决方案有多好,坏或难看; - )
首先通过SELECT DISTINCT nume_attr FROM attributes
来查询所有属性名称
将这些名称存储为具有空字符串值的数组的键,即您应该有一个类似
$template = array(
'Manufacturer Article' => '',
'Manufacturer' => '',
...
)
创建一个存储当前已处理的id_produs的变量(以 false 开头)。 创建一个存储当前“csv”-record的变量(再次以false开头) 查询id_produs和iteratore对结果排序的所有记录。 如果当前记录具有与“当前已处理”不同的id_produs,则写出当前“csv”-array并使用在第一步中创建的模板阵列和当前id_produs重新开始...当前id_produs。对于每条记录,将val_attr值写入csv数组中的键nume_attr。 您将不得不在迭代后检查/写入最后一条记录。
答案 2 :(得分:0)
/* try following code,and reply if it will helpful to you or not */
$select = mysql_query("select * from attributes");
$i = 0;
$i++;
while($row = mysql_fetch_array($select)) {
$csv_array_attributes[$row['id_produs']][$row['nume_attr']] =$row['val_attr'];
$i++;
}
$arraytempheader=array();
$arraytemp=array();
$arraytempheader[0]="";
$j=1;
foreach ($csv_array_attributes as $Colname=>$alline) {
if($j!=1)
{
foreach($arraytempheader as $key=>$val)
{
if($key!=$j && $key!=0)
$arraytemp[$Colname][$key]="";
}
}
foreach ($alline as $keyline=>$valline)
{
$arraytempheader[$j]=$keyline;
$arraytemp[$Colname][$j]=$valline;
$j++;
}
}
$file = fopen("attributes.csv", "w+");
fputcsv($file,$arraytempheader);
foreach ($arraytemp as $Colname=>$alline) {
$finalArray=array();
$finalArray[]=$Colname;
$finalArray=array_merge($finalArray,$alline);
fputcsv($file,$finalArray);
}
fclose($file);
答案 3 :(得分:-1)
尝试以其他方式解决此问题。
在这里选择属性并将它们存储到数组
中$select = mysql_query("select * from attributes");
$rezultat=array();
while($row = mysql_fetch_array($select)) {
$id_produs = $row['id_produs'];
$n_attr = $row['nume_attr'];
$val = $row['val_attr'];
//$final .= $id_produs . "%%" . $val . "%%";
$rezultat[] = array('id'=>$id_produs,'attr'=>$val);
}
在这里你把它们写到文件中。
$file = fopen("attributes.csv", "w+");
foreach ($rezultat as $line) {
fputcsv($file, $line, "^", "`");
}
fclose($file);