2012-06-23 41 views
0

我已经有一段时间了这个问题,我已经在这里发布这个问题,但我没有任何反馈。我试图导出一个查询,我这样做,只是字段,它们是重复的。怎么会这样?Php重复输出在出口

下面是代码:

$fh = fopen('hostess_query4.csv', 'w'); 
$result1 = mysql_query("SELECT ".$username." FROM hostess"); 
if (!$result1) { echo mysql_error(); } 
while ($row = mysql_fetch_array($result1)) { 
    $last = end($row); 
    foreach ($row as $item) { 
     fputcsv($fh, $row, ','); 
     if ($item != $last) 
      fwrite($fh, "\t"); 
     } 
    fwrite($fh, "\n"); 
    } 
} 

fclose($fh); 

回答

0

使用mysql_fetch_assoc(),而不是mysql_fetch_array。
文档:
http://php.net/mysql_fetch_array
http://php.net/mysql_fetch_assoc

或者使用mysql_fetch_array设置为MYSQL_ASSOC第二个可选参数。

新代码:

$fh = fopen('hostess_query4.csv', 'w'); 
$result1 = mysql_query("SELECT ".$username." FROM hostess"); 
if (!$result1) { echo mysql_error(); } 
while ($row = mysql_fetch_assoc($result1)) { 
    $last = end($row); 
    foreach ($row as $item) { 
     fputcsv($fh, $row, ','); 
     if ($item != $last) 
      fwrite($fh, "\t"); 
     } 
    fwrite($fh, "\n"); 
    } 
} 

fclose($fh); 
+0

这是为了解决我的问题吗? –

+0

是的......您正在使用mysql_fetch_array()获取重复项。该foreach将循环遍历整个结果数组(所有数字和字母键) – Jocelyn

+0

可以请你告诉我,我的代码应该如何才能得到任何重复...你可以请更新你的答案与代码? –

0

你是混淆了两个不同的方法一起。

以下方法可行。它使用implode来合并你的行。

$fh = fopen('hostess_query4.csv', 'w'); 

$result1 = mysql_query("SELECT ".$username." FROM hostess"); 

if (!$result1) { echo mysql_error(); } 

while ($row = mysql_fetch_assoc($result1)) { 
    fwrite($fh, implode(",", $row)."\n"); 
} 

fclose($fh); 

您的问题的原因是,mysql_fetch_array将返回0递增和关联数组。例如:

Array 
(
    [0] => 1 
    [ID] => 1 
    [1] => Mike 
    [NAME] => Mike 
    [2] => 22 
    [Age] => 22 
) 

因此,当您导出时,它会导出重复项。将其更改为mysql_fetch_assoc或mysql_fetch_object,并且您将只有一组值。

+0

让我试试吧:) –

+0

不幸的是,它仍然重复我的输出。 –

+0

你能在你的问题中提供结果吗?我们可以看到什么是重复的吗? –

0

你可以试试这个。

$last = end(mysql_fetch_array($result1)); // this will return the last element in $result1 
while (list($username) = mysql_fetch_array($result1)) {   
    fputcsv($fh, $username, ','); 
    if ($username!= $last) 
     fwrite($fh, "\t"); 
    } 
    fwrite($fh, "\n"); 
} 
+0

仍然重复... :( –