Frage zu INSERT
am 05.09.2006 11:15:55 von benjamin235
Hallo Leute!
Ich hab mal ne Frage zu diesem Befehl:
INSERT INTO alarmmanager.tblamwlan (Requests) SELECT COUNT(*) FROM
mydb.test
WHERE mydb.test.TYPE =3D 'Request' AND CURRENT_DATE() =3D mydb.test.DATE
AND EXTRACT(HOUR FROM mydb.test.TIME) =3D EXTRACT(HOUR FROM TIME())
Dieser Befehl wird nicht ausgeführt, aber es kommt auch keine
Fehlermeldung bei mir. In die Tabelle wird dann nur eine 0 eingetragen.
Ich versuche nämlich in die Tabelle tblamwlan die Anzahl der Requests
einzutragen, aber immer nur die, die gerade neu dazu kommen (in meinem
Fall alle Stunden). Was ist denn daran falsch? Könnt ihr mir da helfen?
Re: Frage zu INSERT
am 05.09.2006 11:32:43 von Christian Kirsch
Benjamin Maus schrieb:
> Hallo Leute!
>
> Ich hab mal ne Frage zu diesem Befehl:
>
> INSERT INTO alarmmanager.tblamwlan (Requests) SELECT COUNT(*) FROM
> mydb.test
> WHERE mydb.test.TYPE = 'Request' AND CURRENT_DATE() = mydb.test.DATE
> AND EXTRACT(HOUR FROM mydb.test.TIME) = EXTRACT(HOUR FROM TIME())
>
> Dieser Befehl wird nicht ausgeführt,
Aha. Es wird also nichts eingetragen.
> aber es kommt auch keine
> Fehlermeldung bei mir. In die Tabelle wird dann nur eine 0 eingetragen.
Aha. Es wird also eine Null eingetragen.
Könntest Du Dich einfach entscheiden, was Du meinst? Wird "der Befehl
nicht ausgeführt", ändert sich also nichts an der Tabelle? Oder
enthält die Tabelle "alarmmanager.tblamwlan" in der Spalte Requests
anschließend eine "0", die vorher nicht da war? Tertium non datur, BTW.
> Ich versuche nämlich in die Tabelle tblamwlan die Anzahl der Requests
> einzutragen, aber immer nur die, die gerade neu dazu kommen (in meinem
> Fall alle Stunden). Was ist denn daran falsch? Könnt ihr mir da helfen?
>
Na, wird wohl keiner dazu gekommen sein. Was ist denn das Ergebnis
Deiner Subquery, also des Teils ab "SELECT"?
Und warum verwendest Du reservierte Wörter als Spaltennamen, quotest
die dann aber nicht ordentlich?
Re: Frage zu INSERT
am 05.09.2006 11:35:48 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Frage zu INSERT
am 05.09.2006 11:42:53 von Christian Kirsch
Andreas Kretschmer schrieb:
>
> Warum verwendest Du keinen VIEW für sowas? Egal. Aber warum speicherst
> Du den Timestamp in 2 Spalten (DATE und TIME)? Ich *vermute* einfach
> mal, das Du dafür kapotte Datentypen verwendest und von daher Dein
> Vergleich fehlschlägt.
>
> Ich würde es so machen:
Was Andreas vergaß zu erwähnen: "Ich benutze PostgreSQL, und das kennt
Nicht-Standard-Funktionen wie date_trunc(). Deshalb würde ich es so
machen:"
"In MySQL gibt es andere Funktionen, z.B. MONTH(), die den Monat eines
DATE- oder DATETIME-Werts liefern."
Re: Frage zu INSERT
am 05.09.2006 11:44:39 von Thomas Rachel
Benjamin Maus wrote:
> INSERT INTO alarmmanager.tblamwlan (Requests) SELECT COUNT(*) FROM
> mydb.test
> WHERE mydb.test.TYPE = 'Request' AND CURRENT_DATE() = mydb.test.DATE
> AND EXTRACT(HOUR FROM mydb.test.TIME) = EXTRACT(HOUR FROM TIME())
>
> Dieser Befehl wird nicht ausgeführt, aber es kommt auch keine
> Fehlermeldung bei mir. In die Tabelle wird dann nur eine 0 eingetragen.
Also was jetzt - wird er ausgefürht oder nicht? Wenn er nicht ausgeführt
wird: Woher kommt dann die 0?
Also wird er wohl ausgeführt, aber COUNT(*) ergibt dann wohl 0.
Probier erstmal den SELECT ohne INSERT, evtl. auch SELECT * FROM ..., um zu
sehen, was passiert.
Welche MySQL-Version hast Du? 4.1.10a kennt die Funktion TIME() nicht.
Meinteset Du vielleicht CURRENT_TIME()?
> Ich versuche nämlich in die Tabelle tblamwlan die Anzahl der Requests
> einzutragen, aber immer nur die, die gerade neu dazu kommen (in meinem
> Fall alle Stunden). Was ist denn daran falsch? Könnt ihr mir da helfen?
Das würde ich anders machen, denn auf Deine Art und Weise gehen Dir
garantiert einige Requests durch die Lappen.
Wenn Du das Skript stündlich laufen läÃt, egal zu welcher Minute, bekommst
Du alle Requests seit Minute 0 bis jetzt. Die folgenden Requests bis zur
nächsten vollen Stunde gehen verloren.
Wozu dient die Tabelle tblamwlan? Kann man statt ihrer nicht direkt
mydb.test (die jetzt sicherlich nur übergangsweise so heiÃt) auswerten?
Ansonsten müÃtest Du eben irgendwo mitspeichern, bis zu welcher ID Du
gezählt hast und ab da dann wiederaufnehmen.
Thomas
--
"Ich hätte gern ein Pfund Brot." - "Das heiÃt jetzt 'Kilo'!" - "Wie, nicht
mehr Brot?"
Re: Frage zu INSERT
am 05.09.2006 12:30:44 von benjamin235
Hallo!
Also es wird nur die 0 eingetragen. Soll also heißen dass der Befehl
ausgeführt wird aber er trägt nur die 0 ein. Wenn ich jetzt das hier
ausführe:
INSERT INTO alarmmanager.tblamwlan (Requests) SELECT COUNT(*) FROM
mydb.test WHERE mydb.test.TYPE =3D 'Request'
dann wird mir alles korrekt in meine DB eingetragen (mydb.test heißt
nur übergangsweise so). Das ist ja auch echt in Ordnung, nur ich muss
ja das ganze jede Stunde ausführen und damit er mir nicht immer wieder
alle Requests aufzählt, soll er immer nur die der neuen Stunde nehmen.
Daher der Teil:
...AND CURRENT_DATE() =3D mydb.test.DATE
AND EXTRACT(HOUR FROM mydb.test.TIME) =3D EXTRACT(HOUR FROM TIME())
Das scheint aber nicht zu klappen. Jetzt brauch ich eben Hilfestellung
damit ich immer nur die aktuellsten Requests auslesen kann. Die
Bedingung ist eben die Uhrzeit (immer eine Stunde höher) und das Datum
(falls neuer Tag). Das ist leider alles, mit dem icgh was machen kann.
Re: Frage zu INSERT
am 05.09.2006 12:51:06 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Frage zu INSERT
am 05.09.2006 12:51:15 von benjamin235
Ich hoffe ich hab es auch so einigermaßen verständlich rübergebracht!
Re: Frage zu INSERT
am 05.09.2006 13:02:35 von Andreas Kretschmer
Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de
Re: Frage zu INSERT
am 05.09.2006 13:28:38 von Thomas Rachel
Benjamin Maus wrote:
> Daher der Teil:
>
> ...AND CURRENT_DATE() = mydb.test.DATE
> AND EXTRACT(HOUR FROM mydb.test.TIME) = EXTRACT(HOUR FROM TIME())
>
> Das scheint aber nicht zu klappen.
Dann schau doch mal nach, warum nicht. Hinweise gab ich Dir bereits im
Vorposting. Du bist sicher, daà EXTRACT(HOUR FROM TIME()) was korrektes
ergibt bei Deiner MySQL-Version?
> Jetzt brauch ich eben Hilfestellung damit ich immer nur die aktuellsten
> Requests auslesen kann.
Hinweise dazu gab ich Dir bereits.
> Die Bedingung ist eben die Uhrzeit (immer eine Stunde höher) und das Datum
> (falls neuer Tag). Das ist leider alles, mit dem icgh was machen kann.
Das reicht aber leider nicht aus. Was Du vielleicht noch machen könntest,
wäre statt der aktuellen Stunde die Stunde davor zu nehmen:
set @vorher=ADDDATE(CURRENT_DATE(), INTERVAL HOUR(CURRENT_TIME())-1 hour);
set @jetzt=SUBDATE(ADDDATE(@vorher, INTERVAL 1 HOUR), INTERVAL 1 SECOND);
alternativ:
set @jetzt=ADDDATE(@vorher, INTERVAL 3599 SECOND);
und dann
.... WHERE ADDTIME(concat(mydb.test.DATE," ",mydb.test.TIME),"0") BETWEEN
@vorher AND @jetzt
oder, nach Ãnderung Deines Tabellendesigns:
.... WHERE mydb.test.Zeitpunkt BETWEEN @vorher AND @jetzt
HTH,
Thomas
--
Der Begriff »Pessimismus« wird von Optimisten verwendet, um jene Leute zu
diskreditieren, die die Welt so sehen, wie sie wirklich ist.
[Luton in Discworld Noir]
Re: Frage zu INSERT
am 05.09.2006 17:25:02 von Matthias Esken
On Tue, 05 Sep 2006 11:42:53 +0200, Christian Kirsch wrote:
> Andreas Kretschmer schrieb:
>>
>> Warum verwendest Du keinen VIEW für sowas? Egal. Aber warum speicherst
>> Du den Timestamp in 2 Spalten (DATE und TIME)? Ich *vermute* einfach
>> mal, das Du dafür kapotte Datentypen verwendest und von daher Dein
>> Vergleich fehlschlägt.
>>
>> Ich würde es so machen:
>
> Was Andreas vergaß zu erwähnen: "Ich benutze PostgreSQL, und das kennt
> Nicht-Standard-Funktionen wie date_trunc(). Deshalb würde ich es so
> machen:"
Andreas ist eigentlich der wesentliche Grund, der mich von der Verwendung
von PostgreSQL abhält. Der ist ja mit seinen fanatischen
Bekehrungsversuchen schlimmer als die Windows-Trolle im Heise-Forum.
Gruß,
Matthias
Re: Frage zu INSERT
am 05.09.2006 19:38:50 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Frage zu INSERT
am 05.09.2006 20:01:36 von Matthias Esken
On Tue, 5 Sep 2006 19:38:50 +0200, Andreas Kretschmer wrote:
> Von mir aus, bleib bei MySQL. Nutz das, was Du verdient hast.
Oracle 10g. ;-)
Gruß,
Matthias
Re: Frage zu INSERT
am 05.09.2006 21:15:51 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Frage zu INSERT
am 05.09.2006 21:50:48 von Andreas Scherbaum
Matthias Esken wrote:
> On Tue, 05 Sep 2006 11:42:53 +0200, Christian Kirsch wrote:
>
>> Andreas Kretschmer schrieb:
>>>
>>> Warum verwendest Du keinen VIEW für sowas? Egal. Aber warum speicherst
>>> Du den Timestamp in 2 Spalten (DATE und TIME)? Ich *vermute* einfach
>>> mal, das Du dafür kapotte Datentypen verwendest und von daher Dein
>>> Vergleich fehlschlägt.
>>>
>>> Ich würde es so machen:
>>
>> Was Andreas vergaß zu erwähnen: "Ich benutze PostgreSQL, und das kennt
>> Nicht-Standard-Funktionen wie date_trunc(). Deshalb würde ich es so
>> machen:"
>
> Andreas ist eigentlich der wesentliche Grund, der mich von der Verwendung
> von PostgreSQL abhält. Der ist ja mit seinen fanatischen
> Bekehrungsversuchen schlimmer als die Windows-Trolle im Heise-Forum.
Na, wenn du dich von einer einzelnen Person beeinflussen lässt, machst
du etwas falsch. Btw., woher weisst du, wie es im Heise-Forum zugeht?
Hat man dir nicht gesagt, das man dort nicht mitlesen soll? ;-)
Andreas macht hier nur das, was ich von Mysql-Anhängern anderswo ständig zu
hören bekomme: Lautstark behaupten, ihr Datenbanksystem wäre das bessere.
Abgesehen davon sehe ich von ihm auch ab und zu Beweise für seine Behauptungen
in Form von Code Beispielen für hier gestellte Fragen.
Ok, der Ton könnte etwas besser sein ... aber was solls.
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: Frage zu INSERT
am 05.09.2006 22:05:23 von Andreas Kretschmer
Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)
Re: Frage zu INSERT
am 06.09.2006 00:28:59 von Axel Schwenke
Andreas Scherbaum wrote:
> Matthias Esken wrote:
>> Andreas ist eigentlich der wesentliche Grund, der mich von der Verwendung
>> von PostgreSQL abhält. Der ist ja mit seinen fanatischen
>> Bekehrungsversuchen schlimmer als die Windows-Trolle im Heise-Forum.
>
> Andreas macht hier nur das, was ich von Mysql-Anhängern anderswo ständig zu
> hören bekomme: Lautstark behaupten, ihr Datenbanksystem wäre das bessere.
Das ist keine Entschuldigung. Das Bestreben jedes aufrichtigen
Usenetters sollte sein, das Medium möglichst trollfrei zu halten.
Die Duldung(?) von Trollen in *einer* Ecke des Netzes ist jedenfalls
keine Entschuldigung dafür, *woanders* selber zu trollen.
Abgesehen davon: daß du in Foren unterwegs bist, in denen sich MySQL-
Trolle herumtreiben, sagt auch etwas über *dich* aus.
> Abgesehen davon sehe ich von ihm auch ab und zu Beweise für seine Behauptungen
> in Form von Code Beispielen für hier gestellte Fragen.
Jeder, der seinen Kopf nicht nur zum Frisieren trägt, weiß daß kein
DBMS perfekt ist. Insofern ist es nicht verwunderlich, daß bei
konkreten Fragestellungen mal das eine und mal das andere vorn liegt.
Die Tatsache, daß Andreas nicht *nur* trollt, sondern hin und wieder
tatsächlich Hinweise für eine Lösung des Problems *in MySQL* gibt, hat
ihn bisher vor der formellen Merkbefreiung bewahrt. Daß er bei einigen
Lesern in der Schublade "Troll" steckt, ist sein Problem.
XL
Re: Frage zu INSERT
am 06.09.2006 06:29:46 von Thomas Rachel
Andreas Kretschmer wrote:
> begin Matthias Esken wrote:
>> On Tue, 5 Sep 2006 19:38:50 +0200, Andreas Kretschmer wrote:
>
>>> Von mir aus, bleib bei MySQL. Nutz das, was Du verdient hast.
>
>> Oracle 10g. ;-)
>
> Nix gegen Oracle. Nur bist Du damit hier *deutlich* falscher als ich
> mit PostgreSQL. Du verstehst?
Er hat es jetzt hier einmal erwähnt und gibt ansonsten jedoch
MySQL-spezifische Antworten, die NICHT nach "In meinem tollen DBMS geht
es so und so, wie es Deine dumme DBMS-Simulation macht, weià ich aber
nicht" klingen. Du verstehst?
Thomas
--
Und wenn ich die jungen Leute betrunken aus dem Wirtshaus wanken sehe,
möchte ich ihnen zurufen: Ihr seid auf dem falschen Weg! Kehret um,
kehret um!
Re: Frage zu INSERT
am 06.09.2006 08:44:49 von Andreas Scherbaum
Axel Schwenke wrote:
> Andreas Scherbaum wrote:
>
> Abgesehen davon: daß du in Foren unterwegs bist, in denen sich MySQL-
> Trolle herumtreiben, sagt auch etwas über *dich* aus.
Ich habe weder von Foren noch von Mysql-Trollen gesprochen.
Menschen, die mich davon überzeugen wollen, das Mysql viel viel
besser ist, begegne ich, da ich in der IT-Branche arbeite, häufiger mal.
Spätestens nach 2, 3 Fragen stellt sich dann oftmals (zu meinem
Leidwesen) heraus, das diese Menschen noch nie eine andere Datenbank
Software gesehen haben. Wie möchte mich so jemand überzeugen wollen?
Abgesehen davon: wie soll ich über ein Thema diskutieren können,
wenn ich die zugrundeliegende Software nicht kenne? Das ich Mysql
kenne, sagt erst mal gar nichts über *mich* aus.
> Daß er bei einigen Lesern in der Schublade "Troll" steckt, ist sein Problem.
Damit wird er leben müssen und können, denke ich.
Bye
--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)
Re: Frage zu INSERT
am 06.09.2006 09:26:18 von Christian Kirsch
Matthias Esken schrieb:
> On Tue, 05 Sep 2006 11:42:53 +0200, Christian Kirsch wrote:
>
>> Andreas Kretschmer schrieb:
>>> Warum verwendest Du keinen VIEW für sowas? Egal. Aber warum speicherst
>>> Du den Timestamp in 2 Spalten (DATE und TIME)? Ich *vermute* einfach
>>> mal, das Du dafür kapotte Datentypen verwendest und von daher Dein
>>> Vergleich fehlschlägt.
>>>
>>> Ich würde es so machen:
>> Was Andreas vergaß zu erwähnen: "Ich benutze PostgreSQL, und das kennt
>> Nicht-Standard-Funktionen wie date_trunc(). Deshalb würde ich es so
>> machen:"
>
> Andreas ist eigentlich der wesentliche Grund, der mich von der Verwendung
> von PostgreSQL abhält. Der ist ja mit seinen fanatischen
> Bekehrungsversuchen schlimmer als die Windows-Trolle im Heise-Forum.
>
Das ist doch nun albern. Ja, er missioniert hier ein bisschen, aber
das hält sich doch in Grenzen. Mein Hinweis oben sollte den OP nur
warnen - normalerweise versteckt Andreas ja einen Hinweis auf sowas
selbst in seinen Postings. Und glaub mir: Der Vergleich mit den
Heise-Foren ist völlig fehl am Platz.
Der gelegentliche Blick über die eigene Suppenschüssel schadet nicht -
egal, ob man dabei nun auf Oracle guckt (bei dem man z.B.
Konfigurationsparameter dauerhaft per CLI ändern und
Benutzerauthentifizierung mit LDAP nutzen kann) oder auf PostgreSQL
(das z.B. mehrere Sprachen für Stored Procedures anbietet und
standardkonforme Sequences kennt) oder auf DB2 mit seinem XML-Support.
Es gibt noch genügend Dinge, die MySQL *nicht* kann.