0

私はしばらくこの問題を抱えていました。この質問をここに投稿しましたが、フィードバックはありませんでした。クエリをエクスポートしようとしていますが、フィールドが重複しているだけです。それはどのようにできますか?

コードは次のとおりです。

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

3 に答える 3

0

あなたは2つの別々のアプローチを一緒に混乱させています。

次のアプローチが機能します。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に変更すると、値のセットは1つだけになります。

于 2012-06-23T01:18:52.663 に答える
0

mysql_fetch_array の代わりに mysql_fetch_assoc() を使用します。
ドキュメント:
http://php.net/mysql_fetch_array
http://php.net/mysql_fetch_assoc

または、2 番目のオプション パラメータを MYSQL_ASSOC に設定して mysql_fetch_array を使用します。

新しいコード:

$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);
于 2012-06-23T01:05:08.567 に答える
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");
}
于 2012-06-23T01:31:13.893 に答える