从mysql获取数据并创建csv文件问题


Getting data from mysql and creating a csv file issue

我想提取一些数据并创建一个csv文件。这就是我的属性表的样子。你可以在图片中看到:这里

这是我的代码,我尝试过:

$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);

这将是想要的结果:在这里。因此,nume_attr应该是csv中每一列的标题,val_attr应该是每一个nume_attr的值(见图)。

我尝试了很多方法,但我没有从图片中得到这个结果。我不得不提到,我的表"attributes"有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;
/*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);

让我们假设速度不是问题,并发也不是问题,即无论解决方案有多好、有多坏、有多难看,您现在都只想要结果;-)

首先通过SELECT DISTINCT nume_attr FROM attributes查询所有属性名称
将这些名称存储为具有空字符串值的数组的,即您应该有一个类似的数组

$template = array(
  'Manufacturer Article' => '',
  'Manufacturer' => '',
  ...
)

制作一个存储当前处理的id_produs的变量(以false开头)。创建一个存储当前"csv"记录的变量(再次以false开头)查询id_produs排序的所有记录,并对结果进行迭代器。如果当前记录的id_produs与"当前处理的"不同,则写出当前的"csv"-数组,并使用第一步中创建的模板数组重新开始,当前的id_prodos为。。。当前id_produs。对于每条记录,将val_attr值写入csv数组中的键nume_attr。您必须在迭代后检查/写入最后一条记录。

/* 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);

尝试用其他方式解决此问题。

在这里您可以选择属性并将其存储到阵列中

$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);