Datum Tage dazu Hhhmm?

Alles, was MySQL betrifft, kann hier besprochen werden.

Datum Tage dazu Hhhmm?

Postby hto » 11. November 2010 14:09

Hallo Helfer,

trotz Suche bekomme ich keinen Dreh in die Geschichte.

Habe in einer MySql Tabelle u.a. 2 Felder (eingang und ausgang beide haben -Datum- als Feldtyp)

Nun möchte ich mittels PHP-Script einfach im Feld ausgang ein Datum haben, das z.B. 20 Tage höher ist als eingang

Stelle mir das so vor:
$result1 = mysql_query("select * from 'tabellenname'");
$sqlup1=("UPDATE tabellenname SET ausgang = eingang + 20");
$updaten = mysql_query($sqlup1);

Aber im Feld ausgang passiert nichts. Es kommt auch keine Fehlermeldung.

Wer kann mir sagen, was ich falsch mache?
Danke.

gruss hto
hto
 
Posts: 52
Joined: 03. August 2005 09:59

Re: Datum Tage dazu Hhhmm?

Postby WilliL » 11. November 2010 15:30

Der Code ist nicht eindeutig, eingang könnte hier als Konstante (sollte dann in Großschrifft sein, ist jedoch kein muss) oder eine weitere Tabellenspalte interpretiert werden.
Wo soll denn etwas in der Tabelle geändert werden?
Code: Select all
// <eingang> ist eine Spalte in `tabellenname`
$sql = "select * from `tabellenname`"; // wenn hier die Zeilen schon begrenzt werden müssen, muss hier die WHERE schon rein
$result1 = mysql_query($sql);
// Test auf Plausibilität
// $row = mysql_fetch_array( $result1);
// echo "<br>".$sql." - ".$row." Ergebnisse";
$sqlup1 = "UPDATE `tabellenname`
           SET    `ausgang` = `eingang` + 20
           WHERE  `suchindex` = ".$bedingung;  // zur Definition, in welcher Zeile was geändert werden soll
$updaten = mysql_query($sqlup1);

// <eingang> ist eine Konstante
$sql = "select * from `tabellenname`";
$result1 = mysql_query($sql);
// Test auf Plausibilität
$sqlup1 = "UPDATE `tabellenname`
           SET    `ausgang` = ".eingang." + 20
           WHERE  `suchindex` = ".$bedingung;  // zur Definition, in welcher Zeile was geändert werden soll
$updaten = mysql_query($sqlup1);


Ich würde als Plausibilität auf Anzahl der Ergebnisse testen.
wenn mehrere Ergebnisse erlaubt, eine FOR Schleife
wenn nur ein Ergebnis erlaubt IF .. ELSE error-routine
Willi
WilliL
 
Posts: 624
Joined: 08. January 2010 10:54
XAMPP Version: 5.5.19
Operating System: Win7Home Prem 64 SP1

Re: Datum Tage dazu Hhhmm?

Postby hto » 11. November 2010 16:02

WilliL wrote:Der Code ist nicht eindeutig, eingang könnte hier als Konstante (sollte dann in Großschrifft sein, ist jedoch kein muss) oder eine weitere Tabellenspalte interpretiert werden.
Wo soll denn etwas in der Tabelle geändert werden?
Code: Select all
// <eingang> ist eine Spalte in `tabellenname`
$sql = "select * from `tabellenname`"; // wenn hier die Zeilen schon begrenzt werden müssen, muss hier die WHERE schon rein
$result1 = mysql_query($sql);
// Test auf Plausibilität
// $row = mysql_fetch_array( $result1);
// echo "<br>".$sql." - ".$row." Ergebnisse";
$sqlup1 = "UPDATE `tabellenname`
           SET    `ausgang` = `eingang` + 20
           WHERE  `suchindex` = ".$bedingung;  // zur Definition, in welcher Zeile was geändert werden soll
$updaten = mysql_query($sqlup1);

// <eingang> ist eine Konstante
$sql = "select * from `tabellenname`";
$result1 = mysql_query($sql);
// Test auf Plausibilität
$sqlup1 = "UPDATE `tabellenname`
           SET    `ausgang` = ".eingang." + 20
           WHERE  `suchindex` = ".$bedingung;  // zur Definition, in welcher Zeile was geändert werden soll
$updaten = mysql_query($sqlup1);


Ich würde als Plausibilität auf Anzahl der Ergebnisse testen.
wenn mehrere Ergebnisse erlaubt, eine FOR Schleife
wenn nur ein Ergebnis erlaubt IF .. ELSE error-routine


Hallo WilliL,

danke für die schnelle Antwort.

mit Deiner Anweisung:
$sqlup1 = "UPDATE `tabellenname`
SET `ausgang` = `eingang` + 20 ....


steht im Feld ausgang das entsprechende Datum.
ABER LEIDER NUR wenn es sich um ein Datum innerhalb des Monats handelt, wie auch im Feld eingang.

Bsp (20 Tage dazu):
eingang = 2010-11-10 - Ergebnis ausgang = 2010-11-30
Das ist ok. Wenn aber
eingang = 2010-11-25 ist - dann Ergebnis ausgang = 0000-00-00

gruss hto
hto
 
Posts: 52
Joined: 03. August 2005 09:59

Re: Datum Tage dazu Hhhmm?

Postby Nobbie » 11. November 2010 16:12

Das ist auch syntaktisch nicht richtig, für Datumsoperationen muss man entweder die Funktion DATE_ADD benutzen oder bei simplen Additionen mit dem Schlüsselwort "INTERVAL" arbeiten.

Siehe http://dev.mysql.com/doc/refman/5.1/de/ ... tions.html, Stichwort DATE_ADD (da finden sich auch massig Beispiele, auch für die Verwendung von INTERVAL).
Nobbie
 
Posts: 6799
Joined: 09. March 2008 13:04

Re: Datum Tage dazu Hhhmm?

Postby hto » 11. November 2010 16:28

Nobbie wrote:Das ist auch syntaktisch nicht richtig, für Datumsoperationen muss man entweder die Funktion DATE_ADD benutzen oder bei simplen Additionen mit dem Schlüsselwort "INTERVAL" arbeiten.

Siehe http://dev.mysql.com/doc/refman/5.1/de/ ... tions.html, Stichwort DATE_ADD (da finden sich auch massig Beispiele, auch für die Verwendung von INTERVAL).


Hallo Nobbie,
schon geschaut. Wenn das gemeint ist:
... $sqlup="UPDATE rek SET ausgang = DATE_ADD( eingang( ) , INTERVAL( TO_DAYS(20) ) DAY ))";

oder
... $sqlup1=("UPDATE rek SET ausgang=date_add(eingang, INTERVAL 1 MONTH");

klappt auch nicht.
Möchte doch nur zum Datum in Feld eingang - z.B. 20 Tage dazu und den neuen Wert im Feld ausgang speichern.

gruss hto
hto
 
Posts: 52
Joined: 03. August 2005 09:59

Re: Datum Tage dazu Hhhmm?

Postby WilliL » 11. November 2010 20:00

ich habe mich noch nicht mit Datumsfunktionen in MySql beschäftigt.
ungetestet, ich gehe davon aus, dass in `eingang` ein Datum im Datumformat 2010-09-11 steht und auch vom Typ Datum ist
$sqlup="UPDATE `rek` SET `ausgang` = DATE_ADD(`eingang`, INTERVAL 20 DAY) WHERE 1";
oder
$sqlup="UPDATE `rek` SET `ausgang` = ADDDATE(`eingang`, 20) WHERE 1";

ggf nach
$updaten = mysql_query($sqlup);
einfügen
echo "<br> erg - ".mysql_errno(). ": " . mysql_error()."<br>";
und sehen ob/was als Fehler angegeben wird
Willi
WilliL
 
Posts: 624
Joined: 08. January 2010 10:54
XAMPP Version: 5.5.19
Operating System: Win7Home Prem 64 SP1

Re: Datum Tage dazu Hhhmm?

Postby Nobbie » 11. November 2010 21:40

hto wrote:schon geschaut. Wenn das gemeint ist:
... $sqlup="UPDATE rek SET ausgang = DATE_ADD( eingang( ) , INTERVAL( TO_DAYS(20) ) DAY ))";


Hm, da das total falsch ist, würde mich interessieren, wo Du in der von mir verlinkten Dokumentation dieses Beispiel gefunden hast? Das ist wirklich schrecklich falsch (allein schon "eingang()" - was ist das denn?). Und wieso TO_DAYS? Und wieso Klammern nach INTERVAL? Das ist keine Funktion, sondern ein Schlüsselwort.


hto wrote:oder
... $sqlup1=("UPDATE rek SET ausgang=date_add(eingang, INTERVAL 1 MONTH");


Das sieht syntaktisch richtig aus, aber was heißt "klappt nicht"? Ich meine, das obige ist ja nur ein String, der muss noch ausgeführt werden und der würde für die ganze Datenbank in allen Zeilen den Wert für ausgang setzen - vorausgesetzt, bei eingang handelt es sich um ein Feld mit dem richtigen Format (DATE_TIME oder DATE).

hto wrote:Möchte doch nur zum Datum in Feld eingang - z.B. 20 Tage dazu und den neuen Wert im Feld ausgang speichern.


Da wäre doch ganz simpel diese Anweisung richtig:

Code: Select all
UPDATE rek SET ausgang = DATE_ADD( eingang , INTERVAL 20 DAY ))


Da fehlt dann natürlich eine einschränkende WHERE-Klausel, da sonst die komplette Tabelle geändert wird.

Selbstverständlich mußt Du das noch syntaktisch richtig in Dein PHP Script einbinden. Und wieso heißt Deine Tabelle "rek"? Ist das wirklich so??
Nobbie
 
Posts: 6799
Joined: 09. March 2008 13:04

Re: Datum Tage dazu Hhhmm?

Postby hto » 11. November 2010 22:25

WilliL wrote:ich habe mich noch nicht mit Datumsfunktionen in MySql beschäftigt.
ungetestet, ich gehe davon aus, dass in `eingang` ein Datum im Datumformat 2010-09-11 steht und auch vom Typ Datum ist
$sqlup="UPDATE `rek` SET `ausgang` = DATE_ADD(`eingang`, INTERVAL 20 DAY) WHERE 1";
oder
$sqlup="UPDATE `rek` SET `ausgang` = ADDDATE(`eingang`, 20) WHERE 1";

ggf nach
$updaten = mysql_query($sqlup);
einfügen
echo "<br> erg - ".mysql_errno(). ": " . mysql_error()."<br>";
und sehen ob/was als Fehler angegeben wird


Hallo WilliL,

so: $sqlup="UPDATE `rek` SET `ausgang` = DATE_ADD(`eingang`, INTERVAL 20 DAY) WHERE 1";
oder auch: $sqlup="UPDATE `rek` SET `ausgang` = ADDDATE(`eingang`, 20) WHERE 1";

jetzt funktioniert es prima. Super.
Dann lag es wohl an dem ... Where 1";

Dachte immer die WHERE-Klausel wird so benutzt: ... where irgendwas = irgendwas dann machwas
Aber nur Where 1 ...
Vielleicht kannst Du mir das doch mal erklären?

Danke.

gruss hto
hto
 
Posts: 52
Joined: 03. August 2005 09:59

Re: Datum Tage dazu Hhhmm?

Postby hto » 11. November 2010 22:29

Nobbie wrote:
hto wrote:schon geschaut. Wenn das gemeint ist:
... $sqlup="UPDATE rek SET ausgang = DATE_ADD( eingang( ) , INTERVAL( TO_DAYS(20) ) DAY ))";


Hm, da das total falsch ist, würde mich interessieren, wo Du in der von mir verlinkten Dokumentation dieses Beispiel gefunden hast? Das ist wirklich schrecklich falsch (allein schon "eingang()" - was ist das denn?). Und wieso TO_DAYS? Und wieso Klammern nach INTERVAL? Das ist keine Funktion, sondern ein Schlüsselwort.


hto wrote:oder
... $sqlup1=("UPDATE rek SET ausgang=date_add(eingang, INTERVAL 1 MONTH");


Das sieht syntaktisch richtig aus, aber was heißt "klappt nicht"? Ich meine, das obige ist ja nur ein String, der muss noch ausgeführt werden und der würde für die ganze Datenbank in allen Zeilen den Wert für ausgang setzen - vorausgesetzt, bei eingang handelt es sich um ein Feld mit dem richtigen Format (DATE_TIME oder DATE).

hto wrote:Möchte doch nur zum Datum in Feld eingang - z.B. 20 Tage dazu und den neuen Wert im Feld ausgang speichern.


Da wäre doch ganz simpel diese Anweisung richtig:

Code: Select all
UPDATE rek SET ausgang = DATE_ADD( eingang , INTERVAL 20 DAY ))


Da fehlt dann natürlich eine einschränkende WHERE-Klausel, da sonst die komplette Tabelle geändert wird.

Selbstverständlich mußt Du das noch syntaktisch richtig in Dein PHP Script einbinden. Und wieso heißt Deine Tabelle "rek"? Ist das wirklich so??



Hi Nobbie,

Ja die Tabelle hat den Namen rek. Das ist doch kein Schlüsselwort und es ist kurz und bündig.

UPDATE rek SET ausgang = DATE_ADD( eingang , INTERVAL 20 DAY WHERE 1
Mit dem WHERE 1 klappt es.

Danke.
gruss hto
hto
 
Posts: 52
Joined: 03. August 2005 09:59

Re: Datum Tage dazu Hhhmm?

Postby Altrea » 12. November 2010 06:15

Das WHERE ist auchnur eine Bedingung. Eine Bedingung prüft nur auf true oder false. Also passt die Bedingung, oder passt sie nicht.

Ein WHERE 1 kann man vielleicht am besten mit folgendem Code aus PHP vergleichen:
Code: Select all
if (true) {
    ...
}


WHERE 1 trifft auf jeden vorhandenen Datensatz zu.

hto wrote:Ja die Tabelle hat den Namen rek. Das ist doch kein Schlüsselwort und es ist kurz und bündig.

... und nichtssagend. Tabellen sollten wie Variablen sprechende Namen haben. Wenn du nur für dich alleine programmierst ist das natürlich geschmackssache, deinen Code muss ja auch keiner außer dir verstehen. Sobald du aber mit anderen zusammenarbeiten musst, ist dieses Thema wichtig.
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 6697
Joined: 17. August 2009 13:05
XAMPP Version: 5.5.19
Operating System: W7Ux64

Re: Datum Tage dazu Hhhmm?

Postby hto » 12. November 2010 10:58

Altrea wrote:Das WHERE ist auchnur eine Bedingung. Eine Bedingung prüft nur auf true oder false. Also passt die Bedingung, oder passt sie nicht.

Ein WHERE 1 kann man vielleicht am besten mit folgendem Code aus PHP vergleichen:
Code: Select all
if (true) {
    ...
}


WHERE 1 trifft auf jeden vorhandenen Datensatz zu.

hto wrote:Ja die Tabelle hat den Namen rek. Das ist doch kein Schlüsselwort und es ist kurz und bündig.

... und nichtssagend. Tabellen sollten wie Variablen sprechende Namen haben. Wenn du nur für dich alleine programmierst ist das natürlich geschmackssache, deinen Code muss ja auch keiner außer dir verstehen. Sobald du aber mit anderen zusammenarbeiten musst, ist dieses Thema wichtig.


hallo Altrea,

danke für die Erklärung WHERE..

gruss hto
hto
 
Posts: 52
Joined: 03. August 2005 09:59


Return to MySQL

Who is online

Users browsing this forum: No registered users and 2 guests