sql >> Database >  >> RDS >> Mysql

SQL krijgt ROW_NUMBER en COUNT op elk SELECT-verzoek

Dit is waarschijnlijk bedoeld om paginering mogelijk te maken. Het kan erg duur zijn om het totale aantal rijen weer te geven.

Een manier die ik heb gevonden om goed te werken op een verscheidenheid aan databases is om het werk in twee delen te splitsen. Eerst verzamelt u de ID van de relevante rijen in een tijdelijke tabel. Ten tweede bevraagt ​​u de volledige dataset. De gegevens die in het eerste deel zijn verzameld, bieden u een eenvoudige manier om het totale aantal rijen en de ID's van rijen op een bepaalde pagina te berekenen.

Hier is een ruw voorbeeld voor SQL Server. Merk op dat het voorbeeld niet afhankelijk is van vensterfuncties zoals row_number() , die niet beschikbaar zijn in MySQL.

create table #id_list (rn int identity, pk int);

insert   #id_list
         (pk)
select   customer_id
from     customers
where    name like '%Joe%';

select   (select  count(*) from #id_list) as total_rows
,        rn -- The row's number
,        name
,        birth_date
,        ... -- Other columns
from     #id_list id
join     customer c
on       c.pk = c.customer_id
where    rn between 15 and 29; -- Second 15-row page 

Trouwens, indien mogelijk, zou ik deze eis teruggeven aan de ontwerpers om te controleren of dit de moeite waard is om er veel tijd aan te besteden. Het is veel eenvoudiger als u niet het totale aantal rijen hoeft weer te geven.



  1. om een ​​bepaalde rij uit de database en de html-tabel te verwijderen op de bijbehorende knop klik

  2. Throwback in dates zonder weekends

  3. Hoe installeer ik de node-oracledb-module op AWS centos6 via de opdrachtregel?

  4. Mysql Real Escape String PHP-functie \ toevoegen aan mijn veldinvoer