Inhaltsverzeichnis
Antwortinhalt:
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?

Aug 04, 2016 am 09:19 AM
mysql php

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:

insert into user_table set ... = ..., day_of_year = DAYOFYEAR('1995-07-30');
Nach dem Login kopieren
  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“:

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;
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

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

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)&gt;'07-28' ORDER BY substring(birthday,6,10) asc);
create temporary table bb(select birthday from user_table 
WHERE substring(birthday,6,10)&lt;'07-28' ORDER BY substring(birthday,6,10) asc );
SELECT * FROM aa Union All SELECT * FROM bb
测试了一下,效果如图所示</code>
Nach dem Login kopieren

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

Erklärung dieser Website
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

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

See all articles