sql >> Database teknologi >  >> RDS >> Mysql

SQL får ROW_NUMBER og COUNT på hver SELECT-anmodning

Dette er sandsynligvis beregnet til at tillade paginering. Det kan være rigtig dyrt at vise det samlede antal rækker.

En måde, som jeg har fundet ud af at fungere godt på en række forskellige databaser, er at opdele arbejdet i to dele. Først samler du ID'et for de relevante rækker i en midlertidig tabel. For det andet forespørger du det fulde datasæt. De data, der er indsamlet i den første del, giver dig en nem måde at beregne det samlede antal rækker og id'erne for rækker på en bestemt side.

Her er et groft eksempel for SQL Server. Bemærk, at eksemplet ikke er afhængig af vinduesfunktioner som row_number() , som ikke er tilgængelige i 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 

Forresten, hvis det er muligt, ville jeg returnere dette krav til designerne for at dobbelttjekke, om det er værd at bruge meget tid på. Det er meget nemmere, hvis du ikke behøver at vise det samlede antal rækker.



  1. Sådan gemmer du manglende FLOAT-værdier med NULL i SQL

  2. Mysql Slow Insert

  3. Mysql fuldtekst boolesk søgning - sorter efter relevans og et felt mere

  4. Oracle SQL - Identificer sekventielle værdiområder