CSV dosyası olarak çıktı tablo verilerine MySQL geçici bir tablo oluşturmak nasıl?

2 Cevap php

Ben bu tablodaki tüm verileri çıktılar dışında çalışıyor bir veritabanı tablosundan, bir CSV dosyası oluşturmak için bir komut dosyası var ve ben sadece kullanıcı oturum açmış geçerli için çıkış verilerine ihtiyacım var. Kullanıcıların, onlar okudum kitapların listelerini depolamak, vb okumak istediğiniz edebilmek için geliştiriyorum uygulaması ve ben onlara Excel'e aktarabilirsiniz kitaplarının bir listesini indirmek için izin vermek mümkün olmak istiyorum örneğin. (CSV dosyası OpenOffice yanı sıra MS Excel gibi vs de var olduğunu göz önüne alındığında, bunun için en iyi seçenek olabilir misiniz?)

Ben şimdiki oturum açmış kullanıcıya ait yalnızca kayıtları seçmek için bir seçme sorgusu kullanmak için geçici bir tablo oluşturmak için gerekli olduğunu anladım. I WHERE username='$session->username' kullanılarak geçerli kullanıcı için veri erişebilirsiniz.

Ben o zaman CSV dosyasında kullanılmak üzere çıkış verileri ve daha sonra tabloyu bırak o sorguları çalıştırmayı deneyin önce geçici tablo oluşturmak kadar kolay olacağını düşündüm, ama ben geçici ile tekrar CSV oluşturma kodunu denedim tablo CSV şeyler önce oluşturulan ve yeniden üretilen CSV dosyası tüm kullanıcılar için tüm kayıtları içerir.

Orada veritabanı bağlantı özelliklerini belirleyen bir yapılandırma dosyası, ama aynı zamanda tablo değişkeni $table olarak, dosya oluşturmak için kullanılacak, ve bu ben 'geçici tablo adı olması için kurdum oluşturmak için çalışıyorum.

Bu elimdeki kodu:

<?
$link = mysql_connect($host, $user, $pass) or die("Cannot connect to the database." . mysql_error());
mysql_select_db($db) or die("Can not connect.");

$temp = mysql_query("CREATE TEMPORARY TABLE books_temp SELECT * FROM books WHERE username='$session->username'");
$tempresult = mysql_query($temp);

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field']."; ";
$i++;
}
}
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j]."; ";
}
$csv_output .= "\n";
}

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("d-m-Y") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;
$query  = 'DROP TABLE books_temp';
$result = mysql_query($query);
exit;
?>

Bu mükemmel tüm verileri çıktısı, ama geçici tablo ile kullanmaya çalıştığınızda hala tüm verileri çıktılar çalışır. Bu arada, ben de ucundan geçici tablo bırakma talimatı kaldırmak denedim, ve bu herhangi bir fark yapmaz. Geçici tablonun oluşturulan sanki Ayrıca, PhpMyAdmin kontrol, görünmüyor. Açıkçası burada yanlış bir şey yaptığını ya da bir şey eksik, ama ne hiçbir fikrim yok ediyorum.

2 Cevap

Peki ben geri geldim ve siz söylediğiniz gibi, ben aslında hiç bir geçici tablo gerek yoktu, bu bir mola biraz sonra.

Örtmek bütünlüğü, ve uğruna başkasının aynı sorunla karşılaşırsa, bu ona nihai bir çözüm oldu.

Ile SELECT sorgusu üzerinde yan tümcesi komut çalışıyor, ben sonunda keşfetti, ama ben hala (sadece sütun adları) üzerinden herhangi bir veri elde değildi. Sonunda ben herhangi bir veri elde değildi nedenini anladım '$session->username' geçerli kullanıcı adı erişmek benim PHP sayfaları içinde çalışır çünkü rağmen, sadece sayfaya bağlanan senaryo, hiçbir var Bu oturum bilgi erişmek için bir yol.

Baş - Son olarak ben komut alacağı $username ekstra değişken eklemek ve URL (I oturum bilgi küstah nasıl oldukça emin değilim bir sorgu dizesi bunun için değerini almak için gerekli çalıştı viteste değildi!). Komut komut dosyası çalışma değildi '$session->username' erişemedi çünkü öyleydi.

Aksine ile komut bağlantı daha:

<a href=\"scripts/mysql2csv.php">Download your list</a>

(Sayfa değişkeni bildirerek sonra) ben bunun yerine kullanılır:

$accname = $session->username;

ve:

<a href=\"scripts/mysql2csv.php?user=$accname\">Download your list</a>

Sonra tüm yapmak zorunda yazısının üst kısmına $ username değişkeni eklemek ve değişken SELECT sorgusu değişiklik oldu.

$username = mysql_real_escape_string($_GET['user']);

En azından şimdi hepsi çalışıyor! (Ben diğer tartışma önerilerden bazılarını deneyin yaptım, ama iş için herhangi alamadım - Ya ben sadece başlık satır veya hataları bir yük var).

Ben bir CSV dosyası sütun türleri basit sağlanan yapmak için bir yoksul adamın yaklaşım var. Bu CSV Storage Engine vasıtasıyla yapılabilir.

USE mydb
CREATE TABLE books_csv SELECT * FROM books WHERE 1=2;
ALTER TABLE books_csv ENGINE=CSV;
INSERT INTO books_csv SELECT * FROM books WHERE username='...';

Bu adımı yapıldığında, dosya / var / lib / mysql / Mydb / books_csv.CSV var.

İsterseniz nasıl dosyayı açabilirsiniz. MEZUNLARI tüm alanlar çift tırnak içine alınır.

Bir deneyin vermek!