sql >> Databasteknik >  >> RDS >> Mysql

SQL får ROW_NUMBER och COUNT för varje SELECT-förfrågan

Detta är förmodligen tänkt att tillåta paginering. Att visa det totala antalet rader kan bli riktigt dyrt.

Ett sätt som jag har funnit fungera bra på en mängd olika databaser är att dela upp arbetet i två delar. Först samlar du ID för de relevanta raderna i en tillfällig tabell. För det andra frågar du hela datasetet. Data som samlas in i den första delen ger dig ett enkelt sätt att beräkna det totala antalet rader och ID:n för rader på en viss sida.

Här är ett grovt exempel för SQL Server. Observera att exemplet inte förlitar sig på fönsterfunktioner som row_number() , som inte är tillgängliga 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 

Förresten, om det är möjligt skulle jag återlämna detta krav till designerna för att dubbelkolla om detta är värt att lägga mycket tid på. Det är mycket enklare om du inte behöver visa det totala antalet rader.



  1. Session fungerar korrekt i Localhost men inte i CPANEL

  2. PHP MySQL Count Query Resultatet är sträng, inte heltal

  3. mysql fel 1406

  4. Infoga filinnehållet i MySQL-tabellens kolumn