Nach Jahr und Monat suchen im date Format
Wie lasse ich alle Datensätze anzeigen von einem bestimmten Jahr und einem bestimmten Monat?
Das Datum ist so gepeichert: 2011-06-23
Nun will ich zb. alle Datensätze die von Juni 2011 sind. Gibt es auch ein Möglichkeit den Monat der mit dem Namen Juni übergeben wird bei der Abrage in eine 06 umzuwandeln ohne vorher mit php zb. ein switch zu machen und aud dem Namen wieder eine Zahl zu machen?
Thx for help
Das Datum ist so gepeichert: 2011-06-23
Nun will ich zb. alle Datensätze die von Juni 2011 sind. Gibt es auch ein Möglichkeit den Monat der mit dem Namen Juni übergeben wird bei der Abrage in eine 06 umzuwandeln ohne vorher mit php zb. ein switch zu machen und aud dem Namen wieder eine Zahl zu machen?
Thx for help
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
Soweit ich das nach einer kurzen Recherche gesehen habe, stehen in MySQL direkt die Funktionen YEAR() und MONTH() zur Verfügung, mit denen man Jahr und Monat extrahieren kann und das switch aus PHP lässt sich in MySQL in ein CASE übersetzen.
Letzteres macht in der Handhabung wahrscheinlich nur wenig Unterschied, aber ich glaube nicht, dass es eine direkte Methode zur Eingabe von Monatsnamen gibt.
Letzteres macht in der Handhabung wahrscheinlich nur wenig Unterschied, aber ich glaube nicht, dass es eine direkte Methode zur Eingabe von Monatsnamen gibt.
i u t w w f c b - u y a s t m w m
Danke dir für dein Mühe
genau das hab ich gesucht 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE date LIKE MONTHNAME('June') AND WHERE date LIKE YEAR('2011' at line 4
Was mach ich falsch?
genau das hab ich gesucht |
|
PHP-Quelltext |
1 2 3 4 5 |
$sql = "SELECT date, shop
FROM shopping
WHERE user_id = '$user_id'
AND WHERE date LIKE MONTHNAME('$month')
AND WHERE date LIKE YEAR('$year')";
|
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE date LIKE MONTHNAME('June') AND WHERE date LIKE YEAR('2011' at line 4
Was mach ich falsch?
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
Meines Wissens nach gibt dir monthname den Monatsnamen zurück wenn du vorerst ein Datum rein schmeißt.
z.B. so:
Tipp:
Baue dir mit MYSQL bzw. PHP ein Datum zusammen, die Funktionen sind die DATE(), YEAR(), MOINTH() usw. Funktionen, von denen MySQL schon sehr viel mitbringt, eigentlich musst du dir keine php abhilfe schaffen denn auch MySQL kann dir PRoblemlos Name und Zahl ausgeben.
EDIT:
Folgende Funktionen könnten dir weiterhelfen:
Ich würde nur den Monat und das Jahr nehmen und dann zwei Daten basteln, einmal den 1. des Monats und den letzten (01.01.2011 und 31.01.2011) des Monats und dann mit einem einfachen between arbeiten.
Ich weiß nur nicht genau ob das ganze dann noch wirklich performant ist
z.B. so:
|
|
MySQL-Abfrage(n) |
1 |
SELECT monthname('2007-09-12') /*FROM DUAL*/; |
Tipp:
Baue dir mit MYSQL bzw. PHP ein Datum zusammen, die Funktionen sind die DATE(), YEAR(), MOINTH() usw. Funktionen, von denen MySQL schon sehr viel mitbringt, eigentlich musst du dir keine php abhilfe schaffen denn auch MySQL kann dir PRoblemlos Name und Zahl ausgeben.
EDIT:
Folgende Funktionen könnten dir weiterhelfen:
|
|
MySQL-Abfrage(n) |
1 2 3 |
STR_TO_DATE LAST_DAY DATE_ADD |
Ich würde nur den Monat und das Jahr nehmen und dann zwei Daten basteln, einmal den 1. des Monats und den letzten (01.01.2011 und 31.01.2011) des Monats und dann mit einem einfachen between arbeiten.
Ich weiß nur nicht genau ob das ganze dann noch wirklich performant ist
Mfg
Moee
Moee
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Moee« (27. Juni 2011, 23:13)
Vielleicht habe ich meine Frage falsch Formuliert. Ich bekomme den Monat als Monatsnamen (zb. Jule) und das Jahr (zb. 2011) von einem Formular. Nun sollen nur Datensätze angezeigt werden die von 2011 sind und vom Monat Jule. In der Datenbank ist das Datum mit Jahr-Monat-Tag hinterlegt.
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
SELECT * FROM tablename tn
WHERE YEAR(tn.datumsfeldname) = "2011" AND MONTH(tn.datumsfeldname) = "11"
Wenn du das Formular selber gemacht hast würde ich anstatt den Monatsnamen die dementsprechende Zahl übergeben. Sollte das nicht möglich sein, solltest du eine logik vorwegschalten die Januar in 1 , Februar in 2 usw. umschreibt. Hoffe ich konnte helfen.
WHERE YEAR(tn.datumsfeldname) = "2011" AND MONTH(tn.datumsfeldname) = "11"
Wenn du das Formular selber gemacht hast würde ich anstatt den Monatsnamen die dementsprechende Zahl übergeben. Sollte das nicht möglich sein, solltest du eine logik vorwegschalten die Januar in 1 , Februar in 2 usw. umschreibt. Hoffe ich konnte helfen.
Moin!
Habe etwas ähnliches für unseren Posteingang umgesetzt.
Wenn Das Formular auch von Dir ist, könntest Du für die Datums-Eingabe Dropdown-Listen benutzen, hier kannst Du für Anzeige und Übergabe verschiedene Werte angeben.
Ich habe in meinem Formular 3 Dropdowns pro Datum. Das für den Monat zeigt zwar Monatsnamen an, übermittelt aber die Monats-Nummer.
Aus den 3 Übermittelten Werten lässt sich dann einfach ein MySQL-Datum basteln.
Ist ein wenig Fleißarbeit
mit dem Formular, funktioniert aber prima.
(Funktioniert dann sogar rein mit HTML&PHP, ohne Javascript...)
Für die Anzeige nach dem Auslesen aus der Datenbank benutze ich das Formular auch, setze dann per Schleife das selected-Attribut des jeweiligen Eintrags.
MfG, Marcus
PS: ist natürlich 'select', 'option', 'value'...
Habe etwas ähnliches für unseren Posteingang umgesetzt.
Wenn Das Formular auch von Dir ist, könntest Du für die Datums-Eingabe Dropdown-Listen benutzen, hier kannst Du für Anzeige und Übergabe verschiedene Werte angeben.
Ich habe in meinem Formular 3 Dropdowns pro Datum. Das für den Monat zeigt zwar Monatsnamen an, übermittelt aber die Monats-Nummer.
Aus den 3 Übermittelten Werten lässt sich dann einfach ein MySQL-Datum basteln.
Ist ein wenig Fleißarbeit
mit dem Formular, funktioniert aber prima.(Funktioniert dann sogar rein mit HTML&PHP, ohne Javascript...)
Für die Anzeige nach dem Auslesen aus der Datenbank benutze ich das Formular auch, setze dann per Schleife das selected-Attribut des jeweiligen Eintrags.
MfG, Marcus
PS: ist natürlich 'select', 'option', 'value'...
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »eMKay« (28. Juni 2011, 21:13)
SELECT * FROM tablename tn
WHERE YEAR(tn.datumsfeldname) = "2011" AND MONTH(tn.datumsfeldname) = "11"
Wenn du das Formular selber gemacht hast würde ich anstatt den Monatsnamen die dementsprechende Zahl übergeben. Sollte das nicht möglich sein, solltest du eine logik vorwegschalten die Januar in 1 , Februar in 2 usw. umschreibt. Hoffe ich konnte helfen.
Danke so funktioniert es
Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
nur der Vollständigkeit halber ....
Auch wenn Du das Hauptproblem schon gelöst hast so möchte ich das nicht unkommentiert lassen.
![]()
PHP-Quelltext
1 2 3 4 5$sql = "SELECT date, shop FROM shopping WHERE user_id = '$user_id' AND WHERE date LIKE MONTHNAME('$month') AND WHERE date LIKE YEAR('$year')";
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE date LIKE MONTHNAME('June') AND WHERE date LIKE YEAR('2011' at line 4
Was mach ich falsch?
hier meine drei Anmerkungen:
- Im Querry Reicht es wenn du das WHERE nur einmal verwendest. (daher das - check the right syntax near ...)
- die Fehlermeldung lässt auch darauf schließen das du den Funktionen MONTHNAME() & YEAR() kein Datum übergeben hast.
- zur Verdeutlichung:
- MONTHNAME('2011-06-23') --> wäre richtig und ergibt 'June'
- MONTHNAME('June') --> ist falsch, weil 'June' nicht wie ein Datumstring aussieht
- MONTHNAME('2011-06-23') --> wäre richtig und ergibt 'June'
- im gleichen Sinn bei YEAR()
- YEAR('2011-06-23') --> ist richtig und ergibt '2011'
- YEAR('2011') --> ist falsch, weil ein Datumsstring erwartet wird
- YEAR('2011-06-23') --> ist richtig und ergibt '2011'
- HIER sind die entsprechenden Datumsfunktionen alphabetisch aufgelistet und es wird erklärt welchen wert sie erwarten und was zurückgegeben wird.
- zur Verdeutlichung:
- Dein Querry hätte so Funktionieren müssen:
aber ich finde die Variante wo Zahlen miteinander verglichen werden logischer als wenn man Monatsnamen miteinander vergleicht
PHP-Quelltext
1 2 3 4 5
$sql = "SELECT date, shop FROM shopping WHERE user_id = '$user_id' AND MONTHNAME(date) LIKE '$month' AND YEAR(date) LIKE '$year'";
und dem Computer fällt im allgemeinen das Zahlen vergleichen auch leichter
Gruß
Ego
Ähnliche Themen
-
Datenbanken »-
MySQL-Abfrage: Wert größer als...
(21. August 2005, 14:19)
-
PHP »-
datum abrufen und überprüfen
(29. September 2004, 22:00)
-
PHP »-
Bug bei Uhrzeitausgabe
(14. August 2003, 23:37)
-
PHP »-
unterschied zwischen datums
(10. Juni 2003, 11:46)
-
PHP »-
Datum problem
(13. März 2003, 17:08)


