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

NOW() minus ein Jahr (365 Tage)

Nachdem ich die Spalte Veroeffentlicht (als Wert NULL oder 1) durch die Spalte Veroeffentlicht_am austauscht habe.
Und so auch planen kann möchte ich auch die Spalte NEU (als Tinyint-Wert NULL oder 1) über die Spalte Veroeffentlicht_am austauschen.
Dieser Wert wird aber nur für den Bereich bzw. für eine besondere Darstellung (zb. Schriftart) verwendet.
Und nur bezieht sich nur auf den jeweiligen Bereich.

Das ist mit dem Code unten kein Problem.
Es wird durch das Limit nur der letzte Wert ausgegeben.

Code:
SELECT   /* noch zu klären - provisorisch inhaltliches_UpDate */
Veroeffentlicht_am FROM story
WHERE Veroeffentlicht_am <= NOW()
AND Veroeffentlicht_am >= '2012-01-01' Order by Veroeffentlicht_am DESC LIMIT 1

Doch gibt es Bereiche in denen die letzte Neuerung mehr als 1 Jahr (365 Tage) seit Heute her ist.
Hier soll kein Wert ausgegeben werden.

Wie kann ich zb.
Code:
WHERE Veroeffentlicht_am <= NOW()
AND Veroeffentlicht_am >= [B]NOW() - 365 Tage [/B]
schreiben?
 
Ich erwähnte ja das es Bereiche gibt in denen das letzte UpDate mehr als 1 Jahr her ist.
Nachdem ich nun den SELECT einbauen wollte.

Habe ich festgestellt das ich in der Website folgenden Fehler bekomme wenn SQL ein LEERes Resultat liefert. Weil z.b. das jüngste Datum älter als 365 Tage ist.
MySQL lieferte ein leeres Resultat zurück (d.h. null Zeilen).

Notice: Trying to get property of non-object... on line 10

Notice: Trying to get property of non-object ...11

Code:
$ergebnis = mysql_query("SELECT   /* noch zu klären - provisorisch inhaltliches_UpDate */
Veroeffentlicht_am FROM story /* Auswahl des Bereichs */
WHERE Veroeffentlicht_am <= NOW() /* Veroeffentlichung nicht jünger als Heute */
AND Veroeffentlicht_am >= DATE_SUB(CURDATE(),INTERVAL 365 DAY) /* Veroeffentlichung nicht älter als 365 Tage */
AND ( Veroeffentlicht_am IS NOT NULL)
ORDER BY Veroeffentlicht_am DESC LIMIT 1"); /* absteigend nur ein Datum */
$row = mysql_fetch_object($ergebnis);
echo $row->Veroeffentlicht_am;
$Bereichsdatum = $row->Veroeffentlicht_am;

wird ein Datum geliefert (ich habe nur jeweils eine Bereich getestet für beide Fälle) dann läuft es problemlos.
was mache ich im Fall das ein Leeres Resultat geliefert wird?

Prüfe ich auf LEER?
Code:
  if(!isset($row->Veroeffentlicht_am) || empty($$row->Veroeffentlicht_am)) {
  $row->Veroeffentlicht_am=''; }

Würde das Abhilfe schaffen?
Mir scheint das die Richtung wohl stimmt doch das ich irgendwie anders auf den Wert setzen muss.
Denn wenn oben Leer gemeldet wird (NICHT NULL) dann bekomme ich.

Strict Standards: Creating default object from empty value in
 
Zuletzt bearbeitet:
Du musst $result und nicht $row nehmen.

ich habe die Anleitung so verstanden das ich mich an der Zeile darüber entsprechend orientiern muss.
Code:
$row = mysql_fetch_object($ergebnis);
$num_rows = mysql_num_rows($row);

das bringt nämlich nur noch zusätzliche Fehler.
Notice: Undefined variable: result in
Und $ergebnis
wirft keine weiteren Zeilen aus als das was eh schon bei den Fehlern war.
Notice: Trying to get property of non-object
 
$num = mysql_num_rows($result) bibt dir zurück wieviele treffer du hast

PHP:
$res = mysql_query('SELECT
                        foo
                      FROM
                        bla
                      WHERE
                        foo 
                      >= DATE_SUB(CURDATE(),INTERVAL 365 DAY) ');

$num = mysql_num_rows($res);
echo $num. ' Datensätze gefunden!<br />';
 
Und deshalb bekomme ich ja auch wenn es klappt wegen dem LIMIT "1 Zeilen" wieder und
wenn es Fehler gibt "0 Zeilen" ....eben keine.

Deshalb ja auch der Gedanke und die Frage mit isset

Ich habe es nun auch noch ein mal mit
Code:
if ($num_rows = 0)
{$Bereichsdatum = "0"; }
else {
$Bereichsdatum = $row->Veroeffentlicht_am; }
probiert.

Doch bei ... =$row-Veroeffentlicht_am habe ich dann wieder den selben Fehler
Notice: Trying to get property of non-object

Ich suche also für den Fall in dem 0 Zeilen oder eben kein Datum geliefert wird eine Möglichkeit der Spalte einen Wert zu zuordnen oder zumindest den Fall abdeckt das alle Kriterien nicht zutreffen.
 
Zuletzt bearbeitet:
Wenn mysql_num_rows() 0 zurückgibt, dann gibt es auch 0 Ergebnisse. Wenn Du dir nicht sicher bist, ob das stimmt, führe das Statement manuell über phpmyadmin aus.

Dein Vergleich hier ist außerdem falsch:
PHP:
if ($num_rows = 0)
{$Bereichsdatum = "0"; }
else {
$Bereichsdatum = $row->Veroeffentlicht_am; }

Richtig ist:

PHP:
if ($num_rows == 0)
{$Bereichsdatum = "0"; }
else {
$Bereichsdatum = $row->Veroeffentlicht_am; }
 
Zurück
Oben