Heim >Datenbank >MySQL-Tutorial >So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

PHPz
PHPznach vorne
2023-05-27 11:31:121636Durchsuche

So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Kombiniertes Beispiel:

Dies ist ein Erfassungsblatt zur Erfassung der Besuche von Personen.
Die Daten in der Datentabelle erfassen genau die Hutfarbe, die Uhrzeit und den Personencode (für jede Person eindeutig), den jede Person bei ihrem Besuch trägt.
So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Datenbeispiel:

So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Was getan werden muss, ist:

Erstellen Sie den neuesten Besuchsdatensatz, der die Bedingungen erfüllt.

Was würdest du am besten können?

Um zunächst eines zu implementieren: Nehmen Sie den letzten Besuchsdatensatz des Personencodes A101 heraus.

Zeigen Sie zunächst das falsche SQL-Beispiel: die Verwendung der Funktion max() als selbstverständlich.


SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record WHERE user_code='A101' ;

Abfrageergebnisse (falsche Ergebnisse):

So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Natürlich sind die Daten zunächst sichtbar Blick Es sieht aus wie etwas, ist aber tatsächlich falsch.

Warum ist das falsch? Du kannst mir ein wenig erzählen, da sich einige Leute für den Kommentarbereich interessieren (Brüder können gerne ihre eigene Meinung äußern).

Eine kurze Beschreibung: Unser Fehlerbeispiel wird nicht mit „group by“ verwendet. Tatsächlich können wir es derzeit nur mit MySQL ausführen, und viele Datenbanken melden Fehler direkt.

Dann wird die Ausführung ausgeführt. Tatsächlich entspricht MySQL zu diesem Zeitpunkt der Behandlung der gesamten Tabelle als Inhaltsblock, um einen komprimierten Abruf durchzuführen.

Wir haben die Where-Bedingung user_code='A101' hinzugefügt, sodass der gesamte Inhaltsblock andere Daten herausfiltert, die nicht user_code='A101' sind.

Mit anderen Worten: Bei dieser laxen Ausführung garantiert MySQL, dass max den Maximalwert (der relevanten Spalte) zurückgibt, für andere Spaltenfelder ist dies jedoch nicht garantiert.

Die korrekten Daten sind:

So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Ist max(id) unbrauchbar?

Richtige Verwendung (verwenden Sie den maximalen ID-Wert, der die Bedingungen erfüllt, als Bedingung):

SELECT
id,user_code,cap_color,create_time
FROM vist_record
WHERE id IN (SELECT MAX(id) AS id FROM vist_record WHERE user_code ='A101 ' )

Abfrageergebnisse:
So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Aber angesichts der Art und Weise, wie die Unterabfrage oben verwendet wird,

müssen mich alle insgeheim beschimpft haben. Ist es so mühsam, die neuesten Daten zu erhalten?

Gibt es etwas Einfacheres?

Ja.

Zum Beispiel haben wir festgestellt, dass die ID automatisch inkrementiert wird und die Daten mit der größten ID (Daten, die die Bedingungen erfüllen) die neuesten sind.

Dann können wir DESC in umgekehrter Reihenfolge verwenden, um die neuesten Daten zu erhalten:

DESC ist umgekehrte Reihenfolge/absteigende Reihenfolge.

PS


Oder nach Zeit Umgekehrte Reihenfolge: So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

SELECT *

FROM vist_record
WHERE user_code='A101'

ORDER BY create_time DESC
LIMIT 1;


Abfrageergebnisse:

I So einfach ist das umsetzen? So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Was wäre, wenn wir nicht A101 angeben müssten, sondern die aktuellsten Daten aller Beteiligten?

Das heißt, es gibt mehrere Gruppen von Konzepten.

Die neuesten Qualifikationsdaten für jede Kategorie

Die orangefarbenen Kästchen sind die neuesten Datensätze von A101, B202 und C303, die wir herausnehmen möchten.

Falsches Beispiel:

So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record GROUP BY user_code

Falsches Filterergebnis:

Richtig Kodierung:

SELECT  id ,user_code,cap_color,create_time FROM vist_record  WHERE id in
(
SELECT MAX(id) AS id  FROM vist_record  GROUP BY user_code
)

So finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt

Das obige ist der detaillierte Inhalt vonSo finden Sie die neueste Datenzeile, die die Bedingungen in MySql erfüllt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen