Δεδομενα απο excel καπουτ σε mysql

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
gaucho
Honorary Member
Δημοσιεύσεις: 2408
Εγγραφή: 22 Δεκ 2002 13:18

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από gaucho » 23 Απρ 2013 10:51

Ποιο εργαλειο η τρόπο εχετε δοκιμάσει?

Ψαχνω ενα αλλα να ειναι και δοκιμασμενο.
Πως βαζετε χιλιαδες εγγραφες στην βαση απο αρχειο excel εφόσον συμφωνουν ονομαστικα τα πεδια των πινακων? Η πως εννημερώνετε τα υπάρχον πεδια? Πχ εχετε 500 προιοντα και ο προμηθευτης αλλαξει τιμή χονδρικής. Πως θα αλλάξουμε με τη μι ατις τιμες?

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από Apostolis_38 » 23 Απρ 2013 11:42

Με το excel γίνεται αλλά θέλει σωστή γραμμογράφηση.
Κάτι τέτοιο:

Κώδικας: Επιλογή όλων

(	trim(	'	11711	'	)	,	trim(	'	42	'	)	,	trim(	'		'	)	,	trim(	'	2012-10-22  12:54:20'	)	),
Κάθε ένα από αυτά είναι ξεχωριστή στήλη στο excel και μόλις το φτιάξεις κάνεις εξαγωγή σαν unicode txt και το κάνεις import με κάποιο πρόγραμμα (π.χ. phpMyAdmin).
Σημείωσε οτι η τελευταία γραμμή δεν πρέπει να κλείνει σε κόμμα (,)


Αλλος τρόπος είναι να κάνεις ένα update:

Κώδικας: Επιλογή όλων

UPDATE price SET price = 'νέα τιμή' WHERE κατασκευαστής = 'όνομα κατασκευαστή' AND... AND...
Θέλει μεγάλη προσοχή όμως γιατί μπορεί να επηρεάσεις και εγγραφές που δεν πρέπει.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από korgr » 23 Απρ 2013 12:28

Προσωπικά κάνω ένα export σε csv και μετά δημιουργώ ένα απλό script όπου κάνω browse το csv file και ενημερώνω όλες τις τιμές. Το script μπορεί να αγνοεί κάποιες στήλες και αναλαμβάνει να αντιστοιχίσει τις στήλες που θέλουμε στα κατάλληλα πεδία της mysql

Παράδειγμα από script του Odyssey για update τιμών φαρμάκων για το www.e-farmako.gr που τις παίρνουμε από excell

Κώδικας: Επιλογή όλων

if($_REQUEST['action'] == "import" && $_REQUEST['submitedData']){
	$txt = $_FILES['txt']['tmp_name'];
	if($txt){
		$content = file($txt);
		foreach($content as $line){
			$temp = explode($delimiter, $line);
			if&#40;&#40;int&#41;$temp&#91;0&#93; < 1&#41; continue; // no eof_code found so continue with next one
			if&#40;strlen&#40;$temp&#91;1&#93;&#41; == 2&#41;&#123; // σε περίπτωση που η συνέχεια του ΕΟΦ Κωδικού είναι στη δεύερη στήλη &#40;2 ψηφία&#41;
			$eof_code = $temp&#91;0&#93;.$temp&#91;1&#93;;
			$xprice = &#40;&#40;float&#41;str_replace&#40;",", ".", $temp&#91;2&#93;&#41; > 0&#41; ? &#40;float&#41;str_replace&#40;",", ".", $temp&#91;2&#93;&#41; &#58; NULL;
			$price = &#40;&#40;float&#41;str_replace&#40;",", ".", $temp&#91;3&#93;&#41; > 0&#41; ? &#40;float&#41;str_replace&#40;",", ".", $temp&#91;3&#93;&#41; &#58; NULL;
			&#125;else&#123; // ο ΕΟΦ Κωδικός βρίσκεται αυτόνομος στο πρώτο πεδίο
			$eof_code = $temp&#91;0&#93;;
			$xprice = &#40;&#40;float&#41;str_replace&#40;",", ".", $temp&#91;1&#93;&#41; > 0&#41; ? &#40;float&#41;str_replace&#40;",", ".", $temp&#91;1&#93;&#41; &#58; NULL;
			$price = &#40;&#40;float&#41;str_replace&#40;",", ".", $temp&#91;2&#93;&#41; > 0&#41; ? &#40;float&#41;str_replace&#40;",", ".", $temp&#91;2&#93;&#41; &#58; NULL;			
			&#125;
			$db->query&#40;"update farmaka set `xprice`='$xprice', `price`='$price' where eof_code='$eof_code' "&#41;;
		&#125;
		$messages->addMessage&#40;"Οι τιμές ενημερώθηκαν επιτυχώς"&#41;;
	&#125;
	if&#40;!$txt&#41;&#123;
		if&#40;!$messages->hasErrors&#41; $messages->addError&#40;"Παρακαλούμε επιλέξτε ένα csv αρχείο που να περιέχει επιτρεπτή δομή τιμών φαρμάκων"&#41;;
	&#125;
&#125;

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από Apostolis_38 » 23 Απρ 2013 13:09

Αλλα αντί άλλων :evil:

Αυτό:( trim( ' 11711 ' ) , trim( ' 42 ' ) , trim( ' ' ) , trim( ' 2012-10-22 12:54:20' ) ),
είναι για να περαστούν οι τιμές με εντολή:

Κώδικας: Επιλογή όλων

 INSERT INTO
όνομα πίνακα&#40; πεδία πίνακα&#41;
VALUES&#40;   trim&#40;   '   11711   '   &#41;   ,   trim&#40;   '   42   '   &#41;   ,   trim&#40;   '      '   &#41;   ,   trim&#40;   '   2012-10-22  12&#58;54&#58;20'   &#41;   &#41;,
Για να περαστούν από αρχείο θέλει το txt να είναι κάπως έτσι:

Κώδικας: Επιλογή όλων

"11711","42","","2012-10-22  12&#58;54&#58;20"\n

Σόρρυ για την παραπληροφόρηση...

Άβαταρ μέλους
gaucho
Honorary Member
Δημοσιεύσεις: 2408
Εγγραφή: 22 Δεκ 2002 13:18

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από gaucho » 23 Απρ 2013 13:44

Αμα σε 200 προιοντα αλλαξαν οι τιμες χονδρικης και θελουμε να κανουεμ εννημερωση τη βαση με νεες τιμες λιανικης πως βαζεις το update ερωτημα(αλφαριθμητικο) για το συγκεκριμενο id για >200 εγγραφες?
Μια λυση που μπορω να σκεφτω ειναι στο excel εχοντας το barcode ως id σε μια στηλη πχ Α να κανω αυτοματη συμπληρωση το update ερωτημα σε μια στηλη Β και στη στηλη Γ να εχω τη νεα τιμη λιανικης. Μετα επικοληση σε txt και μετα στο phpmyadmin


Ισως με εναν βροχο if η while οπς εδωσε παραδειγμα ο korgr. Θα το κοιταξω αυτο

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από gvre » 23 Απρ 2013 22:47

Σε γενικές γραμμές χρειάζεσαι κάτι σαν αυτό που σου έγραψε ο korgr. Μια απλοποιημένη έκδοση (χωρίς error handling) είναι η παρακάτω.

Κώδικας: Επιλογή όλων

Το αρχείο export.csv θα έχει γίνει export από excel σε csv. Το 1ο πεδίο είναι ο κωδικός και το 2ο η νέα τιμή. πχ.
"123","23.45"
"124","65.43"


$lines = file&#40;"export.csv", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES&#41;;
if &#40;isset&#40;$lines&#91;0&#93;&#41;&#41;
&#123;
        foreach&#40;$lines as $line&#41;
        &#123;
                $_ = explode&#40;',', str_replace&#40;'"', '', $line&#41;&#41;;
                if &#40;isset&#40;$_&#91;1&#93;&#41;&#41;
                &#123;
                        $sql = "UPDATE table SET price=" . &#40;float&#41;$_&#91;1&#93; . " WHERE id=" . &#40;int&#41;$_&#91;0&#93;;
                        // execute sql here
                &#125;
        &#125;
&#125;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από alou » 24 Απρ 2013 09:42

Σε τέτοιες περιπτώσεις, σχεδόν ίδια με αυτή που αναφέρει ο Korgr από λίστες φαρμάκων, προτιμάω να κάνω import το csv όπως είναι σε ένα προσωρινό πίνακα και να κάνω update τους πίνακες μεταξύ τους γιατί είναι πιο εύκολες και γρήγορες οι συγκρίσεις.

Υπάρχει και odbc connector που συνδέεσαι με localhost ή απομακρυσμένο mysql server για να πάρεις κάποιο table αλλά δεν ξέρω τι / αν πάρχουν δυνατότητες για εισαγωγή στοιχείων (πέρα από export και load data infile), δεν το έχω ψάξει πολύ, αν κάποιος ενδιαφέρεται:

http://dev.mysql.com/downloads/connector/odbc/

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Δεδομενα απο excel καπουτ σε mysql

Δημοσίευση από Apostolis_38 » 24 Απρ 2013 13:07

Υπάρχουν (και γράφτηκαν) αρκετοί τρόποι για να γίνει.
Το θέμα είναι να υπάρχουν μοναδικά πεδία (ξέχωρα από τα πεδία που θα γίνουν update) ώστε να μην ενημερωθούν και εγγραφές που δεν πρέπει.

Για μένα ένα query στο phpmyadmin με όλα τα update μέσα είναι το πιο εύκολο/γρήγορο.
Η λύση με το loop είναι πιο μπελαλίδικη, αλλά αν το update αυτό πρόκειται να γίνεται κάθε λίγο και λιγάκι τότε μάλλον επιβάλετε να το έχεις σαν tool στο προγραμμά σου.



Φυσικά το backup πριν κάνεις το οτιδήποτε είναι αυτονόητο.

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης