Heim >Backend-Entwicklung >PHP-Tutorial >Wie sollten SQL-Paging-Abfragedaten nach dem Geburtstagsdatum sortiert werden?

Wie sollten SQL-Paging-Abfragedaten nach dem Geburtstagsdatum sortiert werden?

WBOY
WBOYOriginal
2016-08-04 09:19:412225Durchsuche

Es gibt eine Benutzerdatentabelle user_table, in der sich ein birthday-Feld befindet, in dem die Zeitstempeldaten gespeichert werden, die dem Geburtsdatum des Benutzers entsprechen (z. B. 1994-01-01、1996-07-1)

Jetzt müssen wir die Benutzerdaten auf den Seiten in der Reihenfolge der Geburtstage vom jüngsten zum weitesten durchsuchen.
Wenn heute beispielsweise 2016-07-28 ist, lauten die Geburtstagsdaten
1995-07-30, 1993-11-31, 1997-08-29, 1995-07-27 Die vier Benutzerdaten von
sind sortiert nach
1995-07-30, 1997-08-29, 1993-11-31, 1995-07-27

Wie schreibe ich eine SQL-Anweisung, um solche Abfragebedingungen zu erfüllen?
Oder was sollte die entsprechende Änderung an der Struktur meiner Datentabelle sein, in der Geburtstage gespeichert werden?

Antwortinhalt:

Es gibt eine Benutzerdatentabelle user_table, in der sich ein birthday-Feld befindet, in dem die Zeitstempeldaten gespeichert werden, die dem Geburtsdatum des Benutzers entsprechen (z. B. 1994-01-01、1996-07-1)

Jetzt müssen wir die Benutzerdaten auf den Seiten in der Reihenfolge der Geburtstage vom jüngsten zum weitesten durchsuchen.
Wenn heute beispielsweise 2016-07-28 ist, lauten die Geburtstagsdaten
1995-07-30, 1993-11-31, 1997-08-29, 1995-07-27 Die vier Benutzerdaten von
sind sortiert nach
1995-07-30, 1997-08-29, 1993-11-31, 1995-07-27

Wie schreibe ich eine SQL-Anweisung, um solche Abfragebedingungen zu erfüllen?
Oder was sollte die entsprechende Änderung an der Struktur meiner Datentabelle sein, in der Geburtstage gespeichert werden?

Einfacher Ansatz unabhängig von Datenvolumen und Leistungsproblemen:

  1. Fügen Sie ein Feld hinzu, um die Informationen von dayofyear zu speichern. Der Feldname lautet beispielsweise day_of_year, dann sieht Ihre Einfügeanweisung wie folgt aus:

<code class="mysql">insert into user_table set ... = ..., day_of_year = DAYOFYEAR('1995-07-30');</code>
  1. Bei der Abfrage zweimal abfragen, zuerst abfragen, ob das Feld „day_of_year“ größer als Ihr aktueller Wert ist, dann abfragen, ob dieses Feld kleiner als der aktuelle Wert ist, sortieren nach „day_of_year“:

<code class="mysql">select * from user_table where day_of_year >= DAYOFYEAR(CURDATE()) order by day_of_year asc;
select * from user_table where day_of_year < DAYOFYEAR(CURDATE()) order by day_of_year asc;</code>

Schauen Sie sich vorher eine Bedingung weniger an
MySQL konvertiert die Zeit 1995-07-30 in den Tag des Jahres DAYOFYEAR('1995-07-30'), subtrahieren Sie den Tag des heutigen Jahres in Days, erhalten Sie einfach ein Unterschied und Reihenfolge nach.

Wenn die Geburtstage im selben Monat und Tag liegen, können Sie sie in aufsteigender Reihenfolge nach Jahr sortieren.

<code>select * from user_table order by (DAYOFYEAR(birthday)-DAYOFYEAR(curdate())),year(birthday) ASC</code>

Idee: Eigentlich sortieren Sie nach der Subtraktion zuerst nach Monat und nach der Subtraktion dann nach Tag

<code>mysql> SELECT name, birthday FROM user_table
 -> WHERE MONTH(birthday) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH))
 -> ORDER BY DAY(birthday) asc;
 </code>

Der obige Code kann die Geburtstagsdaten einen Monat nach dem aktuellen Monat abrufen und in aufsteigender Reihenfolge nach Tagen anordnen. Sie können einfach eine Wiederholung schreiben, um die folgenden herauszunehmen

<code>DROP TEMPORARY TABLE IF EXISTS aa;
DROP TEMPORARY TABLE IF EXISTS bb;
create temporary table aa(select birthday from user_table 
WHERE substring(birthday,6,10)>'07-28' ORDER BY substring(birthday,6,10) asc);
create temporary table bb(select birthday from user_table 
WHERE substring(birthday,6,10)<'07-28' ORDER BY substring(birthday,6,10) asc );
SELECT * FROM aa Union All SELECT * FROM bb
测试了一下,效果如图所示</code>

1995-07-30
1997-08-29
1993-11-31
1999-01-01
1995-07-27

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn