Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



MSSQL stránkování

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: MSSQL stránkování

Autor: peta1 ♂

15:58:33 03.06.2015

nuninek napsal/a


Mohl by jsi my ukázat celý script i se SELECTEM, já to dělám ještě straším způsobem.



Nerozumim. Co je starsi zpusob? Jaky select? Ja tam napsal selectu...

Jestli to spravne chapu, tak ten tvuj script ma nahradit prikaz LIMIT, ktery ma mysql. Tam to funguje tak, ze mas
SELECT data FROM tabulka WHERE podminky ORDER BY serazeni LIMIT 5,50
Cili, vytahni tabulku podle podminek. Serad podle order a z toho vysledku vytahni od 5 radku z hora po radek 5+50. Takze bys tam musel LIMIT nahradit nejakou funkci, ktera pocita radky. A nejspis by se to muselo udelat pres dva SELECTy v sobe, jak jsem se pokusil napsat. Ta funkce se mozna nejmenuje COUNT, ale ROWCOUNT nebo nejak jinak. Ja jsem spis sql amater.
Udelal bych si tedy tabulku, kde mam id a ROWCOUNT(id) AS z. A potom bych tam dal podminku z>=5 AND z<5+50. tim ziskas jen ty id pro tech 50 radku. A pak uz zbyva pomoci LEFT JOIN pridat prislusne dalsi udaje. Muzes je tam priradit rovnou, bez left join, ale prijde mi to strasne narocne na pamet pak, kdyz mas treba 60.000 radku se vsemi udaji v pameti :)

Citovat příspěvek

 

Re: MSSQL stránkování

Autor: nuninek ♂

9:19:00 03.06.2015

Ahoj děkuji,

já také dělám v MySQL spíše. Docela mne zaujalo to stránkování jak děláš ty.

Mohl by jsi my ukázat celý script i se SELECTEM, já to dělám ještě straším způsobem.

Předem děkuji moc

Citovat příspěvek

 

Re: MSSQL stránkování

Autor: peta1 ♂

15:48:06 01.06.2015

Moc ti neporadim, protoze sql na strankovani nepouzivam a spis znam mysql.

"ntervalu článek ohledně stránkování v MSSQL"
Prosim, pokud odkazujes na clanek, uved jeho adresu, text. Jde o to, pochopit, co v tom dotazu, co znamena nebo melo znamenat.
Zkusil jsem google "site:interval.cz stránkování v MSSQL", snad jsem to trefil
https://www.interval.cz/clanky/univerzalni-strankovaci-procedura-v-ms-sql/

SELECT TOP 15 *
FROM
(
SELECT TOP 645 *
FROM
db_sfx_xx_test.dbo.tabsta_sum -- tady bych to dal bez mezer
ORDER BY
id_r DESC -- jmena sloupcu se pisi obvykle malymi pismeny (aspon ja jsem zvykly to tak psat, jen sql funkce velkymi)
) x -- v mysql se dava alias pro tabulku uvnitr jine
ORDER BY
x.id_r ASC -- tady bych pak dal ten alias a ASC

http://www.dpriver.com/pp/sqlformat.htm
- dokaze ten prikaz zformatovat, takze se jevi v poradku. Prikaz TOP neznam. Tu stranku pouzivam na rychly test. Kdyz to zformatuje, tak tam podle sql uz neni moc chyb. Spis pak uz jen v logice, co ten prikaz ma delat.


Ja treba strankovani resim programove. Pouziji
> SELECT COUNT * FROM tabulka WHERE ...

Z programu si odesilam cislo stranky a pocet zaznamu na stranku.
a = SELECT...
b = 5 // pages - to mas z odkazu
c = 20 // 20 radku na stranku - to mas v session nebo tez v odkazu (<a href="listuj.php?b=5&c=20">strana 6</a>)
d = floor(a/c) // v tom prikladu je to CEILING(@ItemCount*1.0/@PageSize)
m = b * c;
m = m > a ? d * c : (m < 0 ? 0 : m); // vetsi nez max, dej maximum | mensi nez 0, dej 0 | jinak dej m
// nebo by slo porovnavat b>d ? d : b < 0 ? 0 : m, ale pro sql bys to musel pak vynasobit
n = c;
> SELECT COUNT * FROM tabulka WHERE ... ORDER BY ... LIMIT m,n -- mysql umi limit, omezeni vyberu zaznamu na treba na 20 radku; nevim, zda to umi i mssql

Vypis stranek
<a href="listuj.php?b= 0 &c=20">prvni</a>
<a href="listuj.php?b= D &c=20">posledni</a>
<a href="listuj.php?b= B &c=20">aktualni</a>
<a href="listuj.php?b= B-1 &c=20">predchozi</a>
<a href="listuj.php?b= B+1 &c=20">nasledujici</a>
Kdyz ti tam da nekdo zapornou, nevadi.
Muzes udelat <select> se vsemi strankami, kdyz chces.


"MS SQL nepodporuje triviální možnost stránkování, jako například MySQL, pomocí klauzule LIMIT. "
Ha, prvni veta. Proto delas takove silenosti :) Fakt netusim, co dela TOP. Ale kdyz bych to ocesal... Tak v celku chces ziskat seznam idecek. Teda, aspon ja bych vzal seznam id a doplnil ostatni udaje pomoci JOIN. Ale mozna je MSSQL rychlejsi pracovat s celou tabulkou

SELECT c.*
FROM
(
SELECT
id,
ROW_NUMBER() AS x -- neco, co cisluje radky
FROM
tab a
WHERE
x>=645 AND x<645+20 -- pro 20 radku na strance
ORDER BY
id DESC
) b
LEFT JOIN tab c ON c.id=b.id
ORDER BY
c.id ASC
Vytahnu vsechny id z tabulky A, ktere maji cislo radky mezi zvolenymi cisly. seradim podle id DESC. seznam ID ulozim do tabulky B. K te pak pripojim tabulku C.
Pouzil jsem tam zkracene "tab", ale vsude by melo byt to tve silene "db_sfx_xx_test.dbo.tabsta_sum".
Obvykle se pripojujes k sql na uzivatele, k serveru a pak k db. Pokud necerpas z jine db a jineho serveru, tak se nazev db uvadet nemusi (v mysql, opet netusim, jak se zachova mssql) a mozna by tam stacilo jen "tabsta_sum"

Citovat příspěvek

 

MSSQL stránkování

Autor: nuninek ♂

16:32:44 30.05.2015

Zdarec
můžete pls poradit, našel jsem na Intervalu článek ohledně stránkování v MSSQL, ale zkusil jsem použít níže uvedený příklad, ale vykopává mne na chabě ORDER

SELECT TOP 15 * FROM(SELECT TOP 645 * FROM db_sfx_XX_test.dbo.TabSta_Sum ORDER BY ID_R DESC) ORDER BY ID_R

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'ORDER'.

Předem děkuji

Nuninek

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: