Datumsvergleich
starkoch
- php
0 Texter mit x0 dedlfix
0 Vinzenz Mai- datenbank
0 EKKi- datenbank
0 starkoch
Hallo,
ich möchte gern ein Datum aus mysql mit dem aktuellen Datum vergleichen.
Wenn das mysql-Datum (typ "date", Format "0000-00-00") kleiner dem heutigen ist, dann soll er das Datum kennzeichnen (x).
------------------
Zum bisherigen Code:
$date_2 = date("Ymd",time());
$abfrage = "SELECT *, *, *, FROM * ORDER BY * DESC, * DESC";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
if($date_2 > $row->memo_date_1)
{
$da1 = "x";
}
else
{
$da1 = "";
}
.
.
.
<td style="width: 100px; font-size:13px">$da1 $row->memo_date_1</span></td>
--------------------
Mache ich aus größer als kleiner als, dann markiert er mir alle memo_date_1
Eventuell hilft es zwei Zahlen miteinander zu vergleichen statt eine Zahl mit einem String der keine Zahl ist?!
Eventuell hilft es zwei Zahlen miteinander zu vergleichen statt eine Zahl mit einem String der keine Zahl ist?!
Also zerlegen in arrays?
Mahlzeit starkoch,
Also zerlegen in arrays?
Was haben jetzt Arrays damit zu tun?
MfG,
EKKi
Mahlzeit starkoch,
Also zerlegen in arrays?
Was haben jetzt Arrays damit zu tun?
MfG,
EKKi
Naja, ich könnte memo_date_1 zerlegen:
$timearray = explode("-", $row->memo_date_1);
$timestamp = mktime(0, 0, 1, $timearray[1], $timearray[2], $timearray[0]);
if($timestamp > (time())
{
true;
}
else
{
false;
}
Aber irgendwie hilft mir das glaube auch nicht weiter.
Mahlzeit starkoch,
Naja, ich könnte memo_date_1 zerlegen:
Ich dachte, Du willst schlicht und ergreifend Datumswerte miteinander vergleichen - und nicht Strings zerlegen, mit Arrays herumbasteln und werweißwasnoch ... es muss nicht immer "von hinten durch die Brust ins Auge" sein: nimm einfach die Funktionen, die für Datumsvergleiche geeignet sind - und zwar an der Stelle, wo es sinnvoll ist. :-)
Aber irgendwie hilft mir das glaube auch nicht weiter.
Naja ... wenn Du Dich gerne mit PHP beschäftigst und Performance keine Rolle spielt, kannst Du das selbstverständlich tun - ich hätte da allerdings noch ein paar Ideen, wie es garantiert noch komplizierter und langsamer ist ... ;-)
MfG,
EKKi
Hallo,
Naja ... wenn Du Dich gerne mit PHP beschäftigst und Performance keine Rolle spielt, kannst Du das selbstverständlich tun - ich hätte da allerdings noch ein paar Ideen, wie es garantiert noch komplizierter und langsamer ist ... ;-)
ja, die hätte ich auch:
man könnte die Arrayelemente nochmals in einzelne Zeichen zerlegen, diese einzeln daraufhin überprüfen, ob es Integer-Werte sind, daraus mittels geeigneter arithmetischer Operationen Tag, Monat und Jahr ausrechnen, überprüfen, ob es auch wirklich gültige Angaben sind, ...
Man könnte natürlich auch die Lösungsansätze aus
https://forum.selfhtml.org/?t=177061&m=1165818 [1]
https://forum.selfhtml.org/?t=177061&m=1165820
verwenden. Die sind aber viel zu einfach und verwenden kein PHP ;-)
Freundliche Grüße
Vinzenz
[1] ich hab den Aliasnamen für die berechnete Spalte vergessen.
Mahlzeit starkoch,
Naja, ich könnte memo_date_1 zerlegen:
Ich dachte, Du willst schlicht und ergreifend Datumswerte miteinander vergleichen - und nicht Strings zerlegen, mit Arrays herumbasteln und werweißwasnoch ... es muss nicht immer "von hinten durch die Brust ins Auge" sein: nimm einfach die Funktionen, die für Datumsvergleiche geeignet sind - und zwar an der Stelle, wo es sinnvoll ist. :-)
Aber irgendwie hilft mir das glaube auch nicht weiter.
Naja ... wenn Du Dich gerne mit PHP beschäftigst und Performance keine Rolle spielt, kannst Du das selbstverständlich tun - ich hätte da allerdings noch ein paar Ideen, wie es garantiert noch komplizierter und langsamer ist ... ;-)
MfG,
EKKi
Habe die DB-Abfrage mit IF durchgeführt:
$abfrage = "SELECT memo_date_1 IF (memo_date_1 < CURDATE(), 'x', '') FROM test ORDER BY memo_date_1 DESC";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
Ergebnis:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource
Mahlzeit starkoch,
$abfrage = "SELECT memo_date_1 IF (memo_date_1 < CURDATE(), 'x', '') FROM test ORDER BY memo_date_1 DESC";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
Du solltest dringend die Rückgabewerte der von Dir verwendeten Funktionen auf Gültigkeit überprüfen, bevor Du mit ihnen irgendwas anstellst.
Ergebnis:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource
Kein Wunder - Dein SQL ist fehlerhaft (und unvollständig). Hast Du eine andere Möglichkeit, erstmal funktionierenden SQL-Code zu entwickeln (phpMyAdmin, Konsole?), bevor Du die Abfragen in Dein PHP einbaust?
MfG,
EKKi
Mahlzeit starkoch,
$abfrage = "SELECT memo_date_1 IF (memo_date_1 < CURDATE(), 'x', '') FROM test ORDER BY memo_date_1 DESC";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);Du solltest dringend die Rückgabewerte der von Dir verwendeten Funktionen auf Gültigkeit überprüfen, bevor Du mit ihnen irgendwas anstellst.
Ergebnis:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resourceKein Wunder - Dein SQL ist fehlerhaft (und unvollständig). Hast Du eine andere Möglichkeit, erstmal funktionierenden SQL-Code zu entwickeln (phpMyAdmin, Konsole?), bevor Du die Abfragen in Dein PHP einbaust?
MfG,
EKKi
ok, folgender code:
//--------------------Abfrage der Kundendaten aus Datenbank----------//
$date_2 = date("Y-m-d",time());
$abfrage = "SELECT IF (memo_date_1 < CURDATE(), 'x', ''),vorname, name, bearbeiter, kundennummer FROM kundenlogin ORDER BY memo_date_1 DESC";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);
//--------------------Datumsvergleich--------------------------------//
if($date_2 > $row->memo_date_1)
{
$da1 = "x";
}
else
{
$da1 = "";
}
//-------------------------------------------------------------------//
...
<td style="width: 100px; font-size:13px">$date_2, $da1, $row->memo_date_1</td>
...
Jetzt bringt er mir die Datensätze mit "x" jedoch ohne Ausgabe von memo_date_1
Mahlzeit starkoch,
zu Anfang mal als Hinweis: FOTU ist nicht besser als TOFU - also lass es besser, OK?
//--------------------Abfrage der Kundendaten aus Datenbank----------//
$date_2 = date("Y-m-d",time());
Wozu das?
$abfrage = "SELECT IF (memo_date_1 < CURDATE(), 'x', ''),vorname, name, bearbeiter, kundennummer FROM kundenlogin ORDER BY memo_date_1 DESC";
Du solltest der Rückgabe der IF-Funktion einen Aliasnamen zuweisen, damit Du darauf zugreifen kannst.
//--------------------Datumsvergleich--------------------------------//
if($date_2 > $row->memo_date_1)
{
$da1 = "x";
}
else
{
$da1 = "";
}
Du brauchst in PHP keinen Datumsvergleich mehr - den führt doch die Datenbank für Dich durch. Du scheinst noch nicht begriffen zu haben, was Du überhaupt machst:
Du fragst die Datenbank nach mehreren Spalten. Die meisten davon existieren in irgendwelchen Tabellen. Als zusätzliche, berechnete Spalte lässt Du Dir das Ergebnis der Funktion IF() mit den passenden Parametern ausgeben. Wenn der Wert der Spalte memo_date_1 kleiner als das aktuelle Datum ist, steht in dieser berechneten Spalte (für die Du sinnvollerweise einen Aliasnamen vergeben solltest) der Wert 'x', wenn nicht ''. Diesen Wert kann Du dann einfach ausgeben - ohne irgendwelche Vergleiche in PHP oder sonstwo.
<td style="width: 100px; font-size:13px">$date_2, $da1, $row->memo_date_1</td>
Jetzt bringt er mir die Datensätze mit "x" jedoch ohne Ausgabe von memo_date_1
Natürlich. Schließlich liest Du diese Spalte auch gar nicht aus - also ist sie nicht im Ergebnis enthalten und kann somit nicht als Objektattribut behandelt werden.
Weiterhin solltest Du darauf achten, dass Du Variableninhalte kontextgerecht maskierst - in diesem Fall solltest Du Dir mal die Funktion htmlspecialchars() anschauen ...
MfG,
EKKi
Mahlzeit starkoch,
$abfrage = "SELECT memo_date_1 IF (memo_date_1 < CURDATE(), 'x', '') FROM test ORDER BY memo_date_1 DESC";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);Du solltest dringend die Rückgabewerte der von Dir verwendeten Funktionen auf Gültigkeit überprüfen, bevor Du mit ihnen irgendwas anstellst.
Ergebnis:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resourceKein Wunder - Dein SQL ist fehlerhaft (und unvollständig). Hast Du eine andere Möglichkeit, erstmal funktionierenden SQL-Code zu entwickeln (phpMyAdmin, Konsole?), bevor Du die Abfragen in Dein PHP einbaust?
MfG,
EKKiok, folgender code:
//--------------------Abfrage der Kundendaten aus Datenbank----------//
$date_2 = date("Y-m-d",time());
$abfrage = "SELECT IF (memo_date_1 < CURDATE(), 'x', ''),vorname, name, bearbeiter, kundennummer FROM kundenlogin ORDER BY memo_date_1 DESC";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);//--------------------Datumsvergleich--------------------------------//
if($date_2 > $row->memo_date_1)
{
$da1 = "x";
}
else
{
$da1 = "";
}//-------------------------------------------------------------------//
...
<td style="width: 100px; font-size:13px">$date_2, $da1, $row->memo_date_1</td>
...
Jetzt hab ich`s:
$abfrage = "SELECT vorname, name, bearbeiter, kundennummer, memo_date_1 FROM kundenlogin WHERE memo_date_1 < CURDATE() ORDER BY memo_date_1 DESC";
Vielen Dank für Eure Hilfe.
Mahlzeit starkoch,
Jetzt hab ich`s:
Öhm - nein.
$abfrage = "SELECT vorname, name, bearbeiter, kundennummer, memo_date_1 FROM kundenlogin WHERE memo_date_1 < CURDATE() ORDER BY memo_date_1 DESC";
Damit bekommst Du in Deiner Ergebnismenge NUR die Datensätze, bei denen das memo_date_1 kleiner als das aktuelle Datum ist. Ich dachte, Du willst ALLE Datensätze haben - wobei die, bei denen das Datum kleiner ist, irgendwie markiert sein sollen?
MfG,
EKKi
Hallo,
Habe die DB-Abfrage mit IF durchgeführt:
$abfrage = "SELECT memo_date_1 IF (memo_date_1 < CURDATE(), 'x', '') FROM test ORDER BY memo_date_1 DESC";
wenn Du das x gleich anhängen willst, dann ist das Resultat eine Zeichenkette. Zeichenketten verbindet man im SQL-Dialekt von MySQL mit der Funktion CONCAT().
Außerdem ist es eine gute Idee, der berechneten Spalte einen Namen zu geben.
Freundliche Grüße
Vinzenz
echo $begrüßung;
ich möchte gern ein Datum aus mysql mit dem aktuellen Datum vergleichen.
Wenn das mysql-Datum (typ "date", Format "0000-00-00") kleiner dem heutigen ist, dann soll er das Datum kennzeichnen (x).
$date_2 = date("Ymd",time());
Ymd ist nicht Y-m-d. Hast du mit Kontrollausaben Wunsch und Wirklichkeit miteinander vergleichen?
echo "$verabschiedung $name";
echo $begrüßung;
ich möchte gern ein Datum aus mysql mit dem aktuellen Datum vergleichen.
Wenn das mysql-Datum (typ "date", Format "0000-00-00") kleiner dem heutigen ist, dann soll er das Datum kennzeichnen (x).
$date_2 = date("Ymd",time());Ymd ist nicht Y-m-d. Hast du mit Kontrollausaben Wunsch und Wirklichkeit miteinander vergleichen?
echo "$verabschiedung $name";
Ich habe aus Ymd = Y-m-d gemacht, jedoch o Erfolg.
echo $begrüßung;
ich möchte gern ein Datum aus mysql mit dem aktuellen Datum vergleichen.
Wenn das mysql-Datum (typ "date", Format "0000-00-00") kleiner dem heutigen ist, dann soll er das Datum kennzeichnen (x).
$date_2 = date("Ymd",time());Ymd ist nicht Y-m-d. Hast du mit Kontrollausaben Wunsch und Wirklichkeit miteinander vergleichen?
echo "$verabschiedung $name";
Ich habe date_2 ausgegeben = 2008-09-18 und memo_date_1 = 2008-09-16.
Die Formatierung sollte stimmen.
echo $begrüßung;
Ich habe date_2 ausgegeben = 2008-09-18 und memo_date_1 = 2008-09-16.
Die Formatierung sollte stimmen.
Ja, und was ergab nun die Kontrollausgabe des Vergleichsergebnisses? var_dump() eignet sich übrigens in dem Fall deutlich besser als ein einfaches echo.
echo "$verabschiedung $name";
echo $begrüßung;
Ich habe date_2 ausgegeben = 2008-09-18 und memo_date_1 = 2008-09-16.
Die Formatierung sollte stimmen.Ja, und was ergab nun die Kontrollausgabe des Vergleichsergebnisses? var_dump() eignet sich übrigens in dem Fall deutlich besser als ein einfaches echo.
echo "$verabschiedung $name";
string(10) "2008-09-18" string(10) "2010-01-15"
Ja, und was ergab nun die Kontrollausgabe des Vergleichsergebnisses? var_dump() eignet sich übrigens in dem Fall deutlich besser als ein einfaches echo.
echo "$verabschiedung $name";
string(10) "2008-09-18" string(10) "2010-01-15"
Sieht nicht nach boolean aus.
Ja, und was ergab nun die Kontrollausgabe des Vergleichsergebnisses? var_dump() eignet sich übrigens in dem Fall deutlich besser als ein einfaches echo.
echo "$verabschiedung $name";
string(10) "2008-09-18" string(10) "2010-01-15"
Sieht nicht nach boolean aus.
...und nun?
Mahlzeit starkoch,
...und nun?
Nun machst Du folgendes: Du liest jede Zeile einzeln aus der Datenbank, druckst sie aus, klebst sie auf ne Postkarte, schickst sie Dir zu, fotografierst sie, lässt das Foto entwickeln, scannst es ein, stellst es auf einem Bildschirm dar, legst den Bildschirm auf nen Fotokopierer, nimmst die Fotokopie, tippst das Datum in einen Taschenrechner, berechnest arithmetisches Mittel der einzelnen durch Bindestriche getrennten Werte ...
... oder Du verwendest einfach mal eine sinnvolle Alternative, auf die Vinzenz und ich Dich schon seit einiger Zeit hinweisen.
MfG,
EKKi
Ja, und was ergab nun die Kontrollausgabe des Vergleichsergebnisses? var_dump() eignet sich übrigens in dem Fall deutlich besser als ein einfaches echo.
echo "$verabschiedung $name";
string(10) "2008-09-18" string(10) "2010-01-15"
Sieht nicht nach boolean aus.
...und nun?
Darüber nachdenken warum das so ist oder darüber, ob das überhaupt das Vergleichsergebnis ist und nicht was anderes.
Mahlzeit starkoch,
string(10) "2008-09-18" string(10) "2010-01-15"
Huuuuuhuuuuu!
*wedel*
*verzeifelt auf sinnvollere Lösungen deut*
*wink*
MfG,
EKKi
Hallo,
ich möchte gern ein Datum aus mysql mit dem aktuellen Datum vergleichen.
das ist kein Problem. Das geht mit SQL kinderleicht.
Wenn das mysql-Datum (typ "date", Format "0000-00-00") kleiner dem heutigen ist, dann soll er das Datum kennzeichnen (x).
das ist auch kein Problem. Das geht mit SQL hervorragend.
Zum bisherigen Code:
das ist ein Problem.
Wenn man ein SQL-Problem hat, dann ist SQL-Code relevant, nicht PHP-Code.
SELECT *, *, *, FROM * ORDER BY * DESC, * DESC
ziemlich fehlerhaftes Statement ;-)
MySQL kennt eine IF-Funktion [sic!].
SELECT
spalte1,
spalte2,
spalte3,
[link:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if@title=IF](datumsspalte < [link:http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_current-date@title=CURRENT_DATE()], 'x', '')
FROM
tabelle
ORDER BY
irgendeine_spalte DESC
Wozu man bei diesem Problem irgendwelches PHP benötigt, ist mir unklar.
Freundliche Grüße
Vinzenz
Mahlzeit starkoch,
zusätzlich zu den anderen Vorschlägen noch folgende Anmerkung:
$abfrage = "SELECT *, *, *, FROM * ORDER BY * DESC, * DESC";
Wenn Du möchtest, dass Dir Deine Leser helfen (können), solltest Du derartige Abfragen nicht posten. Der SQL-Code ist fehlerhaft. Solltest Du überall ein Sternchen hingeschrieben haben, um "Daten zu schützen", so lass Dir gesagt sein, dass man das auf den ersten Blick nicht unbedingt sofort erraten kann, da der * eine Bedeutung in SQL hat. Wenn Du - warum auch immer - Deine Tabellen- und Feldnamen nicht nennen willst, verwende metasyntaktische Bezeichner wie "foo", "bar", "tabelle1" usw. ... so können Deine Leser Dein Problem wenigstens nachvollziehen.
Einen Vorschlag habe ich auch noch:
Warum lässt Du die Vergleichsarbeit nicht die Datenbank machen?
SELECT foo
, bar
, IF memo_date_1 < CURDATE() THEN 'x' ELSE '' AS kennzeichen
FROM bla
MfG,
EKKi
Mahlzeit starkoch,
zusätzlich zu den anderen Vorschlägen noch folgende Anmerkung:
$abfrage = "SELECT *, *, *, FROM * ORDER BY * DESC, * DESC";
Wenn Du möchtest, dass Dir Deine Leser helfen (können), solltest Du derartige Abfragen nicht posten. Der SQL-Code ist fehlerhaft. Solltest Du überall ein Sternchen hingeschrieben haben, um "Daten zu schützen", so lass Dir gesagt sein, dass man das auf den ersten Blick nicht unbedingt sofort erraten kann, da der * eine Bedeutung in SQL hat. Wenn Du - warum auch immer - Deine Tabellen- und Feldnamen nicht nennen willst, verwende metasyntaktische Bezeichner wie "foo", "bar", "tabelle1" usw. ... so können Deine Leser Dein Problem wenigstens nachvollziehen.
Einen Vorschlag habe ich auch noch:
Warum lässt Du die Vergleichsarbeit nicht die Datenbank machen?
SELECT foo
, bar
, IF memo_date_1 < CURDATE() THEN 'x' ELSE '' AS kennzeichen
FROM bla
>
>
> MfG,
> EKKi
>
Ok, werde ich mir für die Zukunft merken ;-) wußte ich nicht.
Mit einer IF Abfrage in mysql habe ich bisher noch nicht gearbeitet. werde gleich mal tüfteln ...