it-swarm.com.de

Der beste Weg, um zu überprüfen, ob ein Datensatz in MySQL vorhanden ist oder nicht

Ich habe eine Prozedur, die prüfen sollte, ob ein Datensatz für einen bestimmten Datumsbereich vorhanden ist oder nicht. Wenn vorhanden, holen Sie den Datensatz ab, andernfalls rufen Sie die letzten 20 Datensätze ab.

Dazu muss ich mehrmals eine Abfrage schreiben, eine zur Überprüfung der Existenz, dann denselben Datensatz oder Datensatz ohne where-Klausel, aber mit limit abrufen.

Die Abfrage läuft ungefähr so ​​ab

set @cnt = (select count(*) from table where date_field between date1 and date2) ; 
if @cnt > 0 then 
    select * from table where date_field between date1 and date2 ; 
else 
    select * from table order by date_field desc limit 0,20 ; 
end if ;

Gibt es eine Möglichkeit, dies in einer einzelnen Abfrage zu tun, da meine Abfrage zu viele Verknüpfungen enthält und zu kompliziert ist? Dies kann einige Zeit in Anspruch nehmen. Wenn ich sie also zweimal aufrufe, erhöht sich die Abrufzeit.

5
Nikesh Kedlaya

Sie könnten dies wahrscheinlich auf 2 Abfragen reduzieren, indem Sie Folgendes tun:

select * from table where date_field between date1 and date2 ; 
set @count = found_rows()
if @count = 0 then
    select * from table order by date_field desc limit 0,20 ; 
end if ;
5
markp-fuso

Dies eliminiert wahrscheinlich die zusätzliche 'Ergebnismenge' (und ist schneller als die Verwendung von COUNT(*)):

IF ( EXISTS( select * from table where date_field between date1 and date2 ) ; 
    select * from table where date_field between date1 and date2 ; 
else 
    select * from table order by date_field desc limit 0,20 ; 
end if ;
2
Rick James