mySQL date Feld nach Monaten,Tagen sortieren
Schnaps3
- php
Hallo hoffe das die Überschrift halbwegs verständlich ist.
Also ich habe ein mySQL Feld in dem Geburtsdaten aus dem wbb2 Board gespeichert werden, die Daten werden dort als 'date' gespeichert (also nach dem Format YYYY-MM-DD)
Ich hole nun diese Daten mit folgender Abfrage aus der Datenbank.
(Hier genau alle user die in diesem Monat Geburtstag haben)
PHP:--------------------------------------------------------------------------------
$sql_this="SELECT userid, username, birthday
FROM bb2_users
WHERE birthday
LIKE '%-".date("m")."-%'
ORDER BY birthday ASC LIMIT 0 , 30";
--------------------------------------------------------------------------------
Das klappt natürlich auch alles nur die Sortierung stimmt nicht, ist ja irgentwie auch klar, der sortiert halt von von nach hinten durch und deswegen stehen die mit der geringen Jahreszahl vorne.
Es soll aber so sein, das die in der Reihenfolge des Monats und der Tage sortiert sind. Also die Jahreszahl komplett außeracht. (Haben ja eh jedes Jahr Geburtstag :lol: )
Wäre nett wenn ihr mir helfen könnt, hab im mySQL Manuell etwas über die mySQL Funktion Extract() gefunden, habe aber leider nicht die Syntax hinbekommen.
Gruß
Schnaps
Hello,
PHP:--------------------------------------------------------------------------------
$sql_this="SELECT userid, username, birthday
FROM bb2_users
WHERE birthday
LIKE '%-".date("m")."-%'
ORDER BY birthday ASC LIMIT 0 , 30";
Like ist sehr teuer.
$sql_this="SELECT userid, username, birthday
FROM bb2_users
WHERE month(birthday) = date("m")
ORDER BY month(birthday) ASC, dayofmonth(bithday) LIMIT 0 , 30";
So sollte das eigentlich gehen. Das hättest Du unter Zuhilfenahme des Manulas aber bestimmt auch selber herausbekommen http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html ;-)
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
$sql_this="SELECT userid, username, birthday
FROM bb2_users
WHERE month(birthday) = month(now())
ORDER BY month(birthday) ASC, dayofmonth(bithday) LIMIT 0 , 30";
Oder besser gleich so.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hi Tom
Danke schon mal für deine Hilfe
Ich habe auch weiter ins Manual geschaut und bin dabei zu folgender Abfrage gekommen.
SELECT userid, username, birthday, (
TO_DAYS( NOW( ) ) - TO_DAYS( bb2_users.birthday )
) /365 AS age, date_format( bb2_users.birthday, '%d' ) AS tag
FROM bb2_users
WHERE birthday
LIKE '%-12-%'
ORDER BY tag ASC
LIMIT 0 , 30
Hab so auch noch das alter direkt mit drin, aber auch noch die Like Abfrage, kannich mir gut vorstellen das die viel Performanz frist, aber in meinem Fall ist das hier glaube ich wurscht.
Es wird eine Tabelle mit 50 Einträgen durchsucht, das braucht nicht wirklich lange.
Vielen Dank aber das du dich auch bemüht hast.
(Ich war auch davor schon auf der Manuall Seite die du angeben hast, hab da aber nur den Exctract befehl gefunden, deshwegen habe ich hier ja gepostet da ich es nicht selber gefunden habe.)
Freundlichen Gruß
Schnaps
hi,
Hab so auch noch das alter direkt mit drin, aber auch noch die Like Abfrage, kannich mir gut vorstellen das die viel Performanz frist, aber in meinem Fall ist das hier glaube ich wurscht.
und warum "wehrst" du dich so gegen die von Tom vorgeschlagene möglichkeit, den monat zu ermitteln?
LIKE ist hier wirklich äußerst unpassend.
gruß,
wahsaga
yo,
LIKE ist hier wirklich äußerst unpassend.
mal davon abgeshen, dass LIKE hier wirklich fehl am platze ist, wird die vorgeschlagene query auch nicht viel performanter sein, es sei den mysql kann einen index auf funktionen aufbauen und sier wurde auch gesetzt.
Ilja