Frage : Aus was ist die beste Weise, zu importieren Daten übertreffen in sql und sicherstellen, dass Feldtypen? eingestellt werden?

Ich habe einen Verteilungsbogen von meinem Finanzbüro, das Daten in ihm unter anderen Feldern hat. Es ist ziemlich genau gerade eine Liste von Namen u. als sie einen Wechsel einlösten. Ich umgewandelt das Datumfeld bis eins, das für das Fragen in sql (2010-01-01) übertreffe kompatibel ist innen. Wenn ich die Daten in SQL importiere, umwandelt es die Zahl in varchar und Pfosten 40269 (oder 40127… abhängig von dem Datum) anstatt des date.

If ändere ich das Feld zu einem Datumfeld, löscht es die Daten in ihm ist Platz u. Plätze NULL, in der das Datum einmal war. Ich muss es ein Datumfeld sein u. muss ich Daten importieren. Ich habe Tausenden in das DB zu speichern Aufzeichnungen.

I morgens using phpMyAdmin u. sql und das DB manipuliert über PHP.

Thanks im Voraus.

Antwort : Aus was ist die beste Weise, zu importieren Daten übertreffen in sql und sicherstellen, dass Feldtypen? eingestellt werden?

Dieses scheint zu arbeiten.  Ihre eigenen Datenbankbescheinigungen ersetzen und Sie sollten in der Lage sein, es anzubringen und es laufen zu lassen.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
" . PHP_EOL;

// DEMONSTRATE HOW TO LOAD A CSV FILE INTO A DATA BASE
$csv = 'RAY_imaginx_data.csv';

// SAMPLE DATA LOOKS LIKE THIS 
// NOTE TRAILING COMMA - PROBABLY AN ERROR - ARTIFACT OF SAVING FROM MICROSOFT EXCEL
// NOTE THE DATE FORMAT - VALID IN PHP, BUT NOT VALID IN MySQL
// 1...5...10...15...20...25...30...35...40...45...
// Vera,Aguirro,,Criselda,regular,1/1/2010,



// CONNECTION AND SELECTION VARIABLES FOR THE DATABASE
$db_host = "localhost"; // PROBABLY THIS IS OK
$db_name = "??";        // GET THESE FROM YOUR HOSTING COMPANY
$db_user = "??";
$db_word = "??";

// OPEN A CONNECTION TO THE DATA BASE SERVER
// MAN PAGE: http://us2.php.net/manual/en/function.mysql-connect.php
if (!$db_connection = mysql_connect("$db_host", "$db_user", "$db_word"))
{
    $errmsg = mysql_errno() . ' ' . mysql_error();
    echo "
NO DB CONNECTION: "; echo "
$errmsg
"; } // SELECT THE MYSQL DATA BASE // MAN PAGE: http://us2.php.net/manual/en/function.mysql-select-db.php if (!$db_sel = mysql_select_db($db_name, $db_connection)) { $errmsg = mysql_errno() . ' ' . mysql_error(); echo "
NO DB SELECTION: "; echo "
$errmsg
"; die('NO DATA BASE'); } // IF WE GOT THIS FAR WE CAN DO QUERIES // CREATING THE TABLE $sql = "CREATE TEMPORARY TABLE t ( a VARCHAR(20) NOT NULL, b VARCHAR(20) NOT NULL, c VARCHAR(20) NOT NULL, d VARCHAR(20) NOT NULL, e VARCHAR(20) NOT NULL, f DATE NOT NULL ) ENGINE=MEMORY"; $res = mysql_query($sql) or die( mysql_error() ); // READING THE CSV FILE AND LOADING THE TABLE $fp = fopen($csv, 'r'); while (!feof($fp)) { // READ THE CSV DATA INTO AN ARRAY $arr = fgetcsv($fp); if ($arr) { // DISCARD THE USELESS NULL STRING CAUSED BY THE TRAILING COMMA array_pop($arr); // CONVERT THE INVALID DATE FORMAT TO THE ISO FORMAT $arr[5] = date('c', strtotime($arr[5])); // CREATE THE INSERT QUERY $sql = 'INSERT INTO t ( a, b, c, d, e, f ) VALUES ('; // APPEND THE DATA FIELDS TO THE INSERT QUERY foreach ($arr as $val) { $val = "'" . mysql_real_escape_string($val) . "'" . ','; $sql .= $val; } // FINISH THE INSERT QUERY $sql = rtrim($sql, ','); $sql .= ')'; var_dump($sql); // RUN THE QUERY if (!$res = mysql_query($sql)) die( mysql_error() ); } } // EXAMINING THE TABLE TO SEE THE DATA WE LOADED $res = mysql_query('SELECT * FROM t'); while ($row = mysql_fetch_assoc($res)) { var_dump($row); }
Weitere Lösungen  
 
programming4us programming4us