» »

SQL, pagination

SQL, pagination

BRBR ::

iz MYSQL baze potegnem nekaj v smislu:

Select ...
group by ... having ...
Limit 0,20


To dela hitro. Za paginacijo pa rabim še vedet kolk recordov bi bilo brez LIMIT.

Vse skupaj sem dal v v eno bazno poceduro, ki vrne recordset od 0,20, in en return value, ki je zadevni count in izkaže se da je zelo počasno (zdaj, ko se je zapisov nabralo), ker moram pač:


select count(*) from

Select ...
group by ... having ...



Kakšna pametna misel ?
  • spremenil: BRBR ()

techfreak :) ::

SELECT SQL_CALC_FOUND_ROWS ime, priimek FROM osebe LIMIT 0,10;


Potem pa za pridobitev števila vrstic brez limit:
SELECT FOUND_ROWS();

BRBR ::

Za tole pa nisem vedel (-:

v mysql query browser:
1. v prvi zavihek, moj sql s SQL_CALC_FOUND_ROWS z LIMIT, in mi vrne 20 recordov, tako kot treba
2. v drugi zavihek SELECT FOUND_ROWS();, in mi vrne 1

EDIT:Malo sem bral help, zgleda da bi moral to spravit v eno globalno variablo:


The row count available through FOUND_ROWS() is transient and not intended to be available past the statement following the SELECT SQL_CALC_FOUND_ROWS statement. If you need to refer to the value later, save it:

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ;
mysql> SET @rows = FOUND_ROWS();


Ni mi čist jasno. Med 1 in 2 , zgoraj, po bazi ne delam nič.

?

Zgodovina sprememb…

  • spremenil: BRBR ()

techfreak :) ::

Verjetno uporabi drugo povezavo?

Zakaj pa v istem zavihtku ne napišeš npr.:
SELECT  SQL_CALC_FOUND_ROWS  * FROM tabela LIMIT 10;
SELECT FOUND_ROWS();

BRBR ::

nč ne pomaga, SELECT FOUND_ROWS(); zmeraj vrne 1,
kajpak ima c_sql znotraj SQL_CALC_FOUND_ROWS
pa tud če ne bi imel bi moral pa vsaj vrnit 20.

DELIMITER $$

DROP PROCEDURE IF EXISTS `getOnePageOfDataNew` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `getOnePageOfDataNew`(OUT i_result INT,
                                                                 IN  c_sql text,
                                                                 IN  c_limit VARCHAR(60)
                                                                 )
BEGIN

DECLARE tmpInt INT;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
  set i_result = -1;
END;

Set @i_count = 0;

SET @s = CONCAT(c_sql," ",c_limit);
prepare stmt from @s;
execute stmt;
DEALLOCATE PREPARE stmt;

SELECT FOUND_ROWS() into @i_count;
set i_result = @i_count;

END $$

DELIMITER ;



EDIT:tkole pa npr dela, čudno res ...


Select SQL_CALC_FOUND_ROWS id_galery
FROM galery_1
LIMIT 0,18

union

SELECT FOUND_ROWS()

Never underestimate the power of idiots in large groups.

Zgodovina sprememb…

  • spremenil: BRBR ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL vprasanje (strani: 1 2 )

Oddelek: Programiranje
688369 (5048) BivšiUser2
»

MySQL procenti

Oddelek: Programiranje
91159 (825) Malik12
»

c# - mssql kombinacija / problem pri zapisu row-a v bazo

Oddelek: Programiranje
121601 (1410) darkolord
»

[Visual C#] TableAdapter

Oddelek: Programiranje
61134 (1010) detroit
»

Malce zahtevnejši SQL stavek včasih narobe SELECT-a

Oddelek: Izdelava spletišč
302143 (1812) Brilko

Več podobnih tem