CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
20.01.2015, 22:30:11
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
Daten in Tabelle einfügen
Hi zusammen,
ich möchte gern folgende Daten in eine Tabelle schreiben.
Hier ein BSP.Datensatz:
PHP-Code:
4OR-Q J OPER RES;4OR-A QUARTERLY JOURNAL OF OPERATIONS RESEARCH;GERMANY;1619-4500;270;0,73;1,137;0,03;33;5,4;0,00163;0,635;SCIENCE;C
Die einzelen Spalten sind ";"-getrennt. Die Zahlen in Spalte 5 und 9 sind immer ganzzahlig. Hier sind aber auch leere Zellen möglich.
Spalte 6,7,8,10,11,12 sind Dezimalzahlen mit max. 6 Nachkommenzahlen und insgesamt max. 9 Ziffern.
So habe ich die Tabelle aufbauen wollen.
PHP-Code:
CREATE TABLE `journal_cr` (
`Abbrevation` varchar(45) NOT NULL,
`Name` varchar(255) NOT NULL,
`Country` varchar(45) DEFAULT NULL,
`ISSN` varchar(9) DEFAULT NULL,
`TotalCites` int(11) DEFAULT NULL,
`ImpactFactor` float DEFAULT NULL,
`ImpactFactor_5Y` float DEFAULT NULL,
`ImmediacyIndex` float DEFAULT NULL,
`Articles` int(11) DEFAULT NULL,
`CitedHalfLife` float DEFAULT NULL,
`EigenfactorScore` float DEFAULT NULL,
`ArticleInfluenceScore` float DEFAULT NULL,
`Category` varchar(255) DEFAULT NULL,
`VHB` varchar(3) DEFAULT NULL
)
Leider kommt dann immer der Fehler :
10853 row(s) affected, 64 warning(s): 1265 Data truncated for column 'ImpactFactor' at row 1
Und die Nachkommazahlen werden abgeschnitten.
Jemand eine Idee wo ich den Fehler eingebaut habe?
LG
kid
|
21.01.2015, 08:05:57
|
Junior Member
|
|
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
|
|
AW: Daten in Tabelle einfügen
Zitat:
Zitat von kidchino
Jemand eine Idee wo ich den Fehler eingebaut habe?
|
Ja, klar. In dem Teil, den Du uns nicht gezeigt hast.
|
21.01.2015, 12:26:32
|
|
Anfänger
|
|
Registriert seit: Dec 2014
Alter: 35
Beiträge: 20
|
|
AW: Daten in Tabelle einfügen
Code:
insert into kidchino values
('4OR-Q J OPER RES','4OR-A QUARTERLY JOURNAL OF OPERATIONS RESEARCH','GERMANY','1619-4500','270','0.73','1.137','0.03','33','5.4','0.00163','0.635','SCIENCE','C')
zumindest das einfügen klappt ohne probleme bei mir...
ach du musst die Kommazahlen mit (.) angeben!
Habe hier auf Arbeit eine ähnliche Konstellation... Ich bekomme eine XML welche Daten enthält die nicht auf meine Tabelle passen.
Ich füge alle Daten in eine Tabelle die komplett aus char besteht und übermittle die Daten danach in die gewollte formation mit
den gewollten änderungen in die Zieltabelle.
like
Code:
#insert into zielTabelle
select
CONVERT(decimal(10,1),CONVERT(float,REPLACE([spalteMitKomma],',','.'))) AS 'umbenannt'
from charTabelle
von CHAR in DECIMAL klappt nicht deswegen der umweg über float
Wenn du Decimal nicht brauchst kannst auch gleich float lassen...
Das ganze führe ich solange aus bis die ausgabe auf die Zieltabelle passt und dann benutze ich das Insert mit.
Vielleicht hilft dir das als Ansatz dein Problem zu lösen.
Lg BozzaCoon
|
21.01.2015, 13:00:46
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Daten in Tabelle einfügen
@pguser:
Herrlich, deine Beiträge sind so herrlich konstruktiv!
Verstehe nicht warum du überhaupt Deine Zeit verschwendest und antwortest.
@BozzaCoon:
Vielen Dank. Ich werde es gleich probieren. An den Punkt hatte ich auch schon gedacht aber wusste nicht wie ich ihn ändere. Die Daten kommen aus Excel. Und die Änderung des Trennzeichens in Excel brachte nicht viel. Hab dann den Umweg über CSV und NOTEPAD++ gemacht und dort alle "," zu "." ersetzt. Aber ein Fehler kam dann auch :)
Ich probiere mal Deinen Ansatz! Danke!
|
21.01.2015, 13:21:08
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Daten in Tabelle einfügen
Hey,
jetzt habe ich den Fehler entdeckt.
Wenn ich eine so definierte Spalte habe:
`ImpactFactor` float DEFAULT NULL,
und ich in dieser Spalte einen leeren Wert habe, dann kommt der Fehler und es wird eine "0" geschrieben anstelle von NULL.
Liegt das daran, dass NULL kein Float ist ?
Wenn ja (und auch wenn nicht) wie kann ich es ändern?
"0" ist auch in meinem Fall ja nicht "keine Angabe"
VG
Geändert von kidchino (21.01.2015 um 13:36:44 Uhr)
|
22.01.2015, 13:42:33
|
Member
|
|
Registriert seit: Mar 2004
Ort: wien
Beiträge: 512
|
|
AW: Daten in Tabelle einfügen
Zitat:
Zitat von kidchino
@pguser:
Herrlich, deine Beiträge sind so herrlich konstruktiv!
Verstehe nicht warum du überhaupt Deine Zeit verschwendest und antwortest.
|
Na ja, so unrecht hat er ja nicht, wo ist dein Code zum INSERT? Niemand weiss, was du wie in die Datenbank schreibst und genau da liegt der Fehler
Zitat:
Zitat von kidchino
...und ich in dieser Spalte einen leeren Wert habe, dann kommt der Fehler und es wird eine "0" geschrieben anstelle von NULL.
Hey,
Liegt das daran, dass NULL kein Float ist ?
Wenn ja (und auch wenn nicht) wie kann ich es ändern?
"0" ist auch in meinem Fall ja nicht "keine Angabe"
VG
|
Jep..!
Leer ist keine Zahl, daher ein ungültiger Wert für ein float!
Ändern:
Indem du aus float z.B. ein varchar machst, da darf man dann auch leere Inhalte einfügen.
Ansonsten musst du dein Script umarbeiten und das Feld float auf 0 prüfen und 0 = 'Keine Angabe' setzen (im Sinne 0 = Nichts, also keine Angabe)
Ein 0 erreicht man recht leicht, indem man z.B. die Variable, in der dein Wert liegt mit 1 multipliziert. Ist diese Variable '' (leer) ergibt die Multiplikation 0
PHP-Code:
<?PHP $a = ''; $b = 1;
echo '$a * $b = '.($a * $b);
Auch hier fehlt schlicht der PHP-Code für dein INSERT, den du einsetzt, aus der reinen Tabellendefinition (hier mal ein Lob, dass du die Tabelle und ihren Aufbau überhaupt gepostet hast) kann man nicht ersehen, wo die Fehler herkommen.
__________________
Gruss sys ;-)
Ich möchte wie mein Grossvater sterben, lächelnd und schlafend, nicht schreiend und weinend, wie sein Beifahrer.
|
22.01.2015, 16:21:38
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Daten in Tabelle einfügen
Hey sysop,
danke für die Antwort.
Ich habe die Daten entweder mit
PHP-Code:
Load data local infile *.csv
oder über ein Excel Addon in die Datenbank geladen.
Varchar hatte ich auch probiert, aber dann fiel mir auf, dass bei Operationen( bspw. MAXIMUM)
9.1 größer ist als 11.6. Und da wusste ich nicht was sonst noch so schief geht beim Rechnen.
Ich habe teilweise auch Werte die wirklich '0' sind und daher ist es nicht mehr eindeutig welcher Wert wirklich '0' ist und welcher NULL seinen sollte, jetzt aber fälschlichweise '0' ist.
Ich hab mir dann mit einem speziellen Wert geholfen (-77). Das verändern natürlich den Mittelwert (bspw) aber ich weiß es ja. Ist nur doof wenn ich die Datenbank übergebe.
Eine richtige Lösung gibt es wohl nicht.
VG
|
22.01.2015, 16:39:35
|
Junior Member
|
|
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
|
|
AW: Daten in Tabelle einfügen
Zitat:
Zitat von kidchino
Eine richtige Lösung gibt es wohl nicht.
|
da liegst du falsch.
|
23.01.2015, 10:14:29
|
Anfänger
|
|
Registriert seit: Jan 2015
Alter: 41
Beiträge: 19
|
|
AW: Daten in Tabelle einfügen
[...]
|
23.01.2015, 10:51:20
|
Junior Member
|
|
Registriert seit: Apr 2014
Alter: 57
Beiträge: 186
|
|
AW: Daten in Tabelle einfügen
Zitat:
Zitat von kidchino
[...]
|
Genau.
Code:
test=# create table abc(a int, b numeric, c float);
CREATE TABLE
test=*# copy abc from stdin csv delimiter ';' null '';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> ;;
>> \.
COPY 1
test=*# select * from abc ;
a | b | c
---+---+---
| |
(1 row)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:13:56 Uhr.
|