• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

update if

Tanja

Neues Mitglied
Habe in meiner Datenbank u.a. zwei Spalten, Geburtstag und Todestag.
Manchmal ist ein genaues Datum zum Todestag angegeben, oft aber nicht - obwohl ganz bestimmt schon tot.

Datum liegt vor als date 0000-00-00

Jeder Datensatz wird auf einer separaten Seite ausgegeben, so das eine eindeutige id da ist. Ich würde gerne zuerst das Geburts- und Todesdatum aus sql abfragen und wenn kein Todesdatum hinterlegt ist das Alter berechnen und wenn älter als 20 dann als tot kennzeichnen. Die Alterberechnung kann ich nach der ersten Abfrage ausführen und dann müsste ich ggf. updaten.
Also so:
PHP:
SELECT geburtstag, todestag FROM Tabelle WHERE id=id
....
if todestag = 0000-00-00
Altersberechnung
....
if Alter <20 
 update todestag = 1930.01.01

geht das?
 
Werbung:
Du willst Daten auslesen, also musst Du diese im SELECT-Abschnitt definieren - nicht danach.

Code:
SELECT geburtstag, todestag, 
IF( todestag = '0000-00-00', [Altersberechnung], '') alter
FROM Tabelle

Ein UPDATE-Statement müsstest Du danach erst ausführen, also nach dem SELECT-Statement.
 
hmmm....
das Alter berechne ich mit einer Funktion - die Werte aus der DB braucht.
PHP:
function alter($datum)
    {
        list($y, $m, $d) = explode('-', $datum);
        $alter = date('Y') - $y;
        $monat = date('m');
        if ($monat < $m or ($monat == $m and $d > date('d'))) {
            $alter--;
        }
        return $alter;
    }

    // Datum festlegen
    //$datum = '1910-08-27';
    $datum = $row['date_of_birth'];
    // Funktion aufrufen
    //echo alter($datum);

vielleicht nicht ganz unwichtig- auch von vor 1970 sind Geburtstage dabei
das kann ich so nicht in die query packen....
 
Werbung:
Code:
SELECT 
    `geburtstag` , 
    `todestag` , 
    (YEAR( todestag ) - YEAR( geburtstag )) - ( RIGHT( todestag, 5 ) < RIGHT( geburtstag, 5 ) ) AS gesuchtesAlter
  FROM 
    `tabelle`
Wenn dann beim Auslesen der Daten in gesuchtesAlter ein negativer Wert steht, hast du keinen Todestag.

Und wenn kein Todestag vorhanden ist und dafür das aktuelle Datum genommen werden soll:
Code:
SELECT 
   `geburtstag` , 
   `todestag` , 
   if (`todestag` = '0000-00-00', 
       (YEAR(curdate()) - YEAR(geburtstag)) - (RIGHT(curdate(), 5) < RIGHT(geburtstag, 5)) , 
       (YEAR(todestag) - YEAR(geburtstag)) - (RIGHT(todestag, 5) < RIGHT( geburtstag, 5))
      ) AS meinAlter
   FROM 
     `tabelle`
 
Zuletzt bearbeitet von einem Moderator:
wofür steht das RIGHT und die 5?
Ich habe das ganze bis jetzt mit php berechnet:
PHP:
if ($row['date_of_death'] != '0000-00-00')
    {echo '<tr> <td>Todesdatum:</td> <td>'.$row['date_of_death'].' </tr>';} 
    

    function alter($datum)
    {
        list($y, $m, $d) = explode('-', $datum);
        $alter = date('Y') - $y;
        $monat = date('m');
        if ($monat < $m or ($monat == $m and $d > date('d'))) {
            $alter--;
        }
        return $alter;
    }

    $datum = $row['date_of_birth'];


if (alter($datum)>20)      
{ echo '<tr> <td>Todesdatum:</td> <td>unbekannt</td> </tr>';}

if (alter($datum)<20 && $row['date_of_death'] == '0000-00-00')
{
$geburtsdatum = $row['date_of_birth'];
$geburtsdatum = DateTime::createFromFormat('Y-m-d', $geburtsdatum);
$jetzt = new DateTime();
$alterheute = $jetzt->diff($geburtsdatum);
echo '<tr> <td>Alter:</td> <td>'.$alterheute->format('%y Jahre, %m Monate und %d Tage alt').'</td> </tr>';}

und wenn dieses
PHP:
if (alter($datum)>20)      
{ echo '<tr> <td>Todesdatum:</td> <td>unbekannt</td> </tr>';}
wahr ist dann soll ein Update in der DB gemacht werden von 0000-00-00 auf 1930-01-01
 
Werbung:
hast ja Recht mit der Doku - nur vor der drück ich mich gerne weil ich meistens nicht verstehe :roll:

Ok, somit könnte ich das Alter in Jahren rausholen, in meinem Fall brauche ich aber die Alterberechnung genau (weil die jüngeren mit xJahre,x Monate gezeigt werden).

Meine Frage im ersten Post war ja schon ob ich nun "einfach" im in der if-Anweisung das sql-update schreiben kann - oder ob es eine bessere Lösung gibt. Braucht ja für jedes Tier nur einmalig geupdatet werden.
PHP:
if (alter($datum)>20)      
{mysql_query("UPDATE dog SET date_of_death='"1930-01-01"' WHERE id=".$_POST['id']."", $db) OR die(mysql_error("<p>Die Datenbank ist momentan nicht erreichbar!</p>")); 
}
und dann die echo-Ausgabe auf 1930 abfragen?
 
Zurück
Oben