Autor Zpráva
jio
Profil
Dobrý den,
v tabulce mám sloupec id, na kterém je primární klíč a při vložení nové věty se vždy přečte Max(id) a založí se věta s id+1.

Pokud v takovéto tabulce listuju s "ORDER BY id DESC LIMIT start,10", tak poslední vložená věta s id např. 146 má start=0. Problém nastává, když je několik vět vymazáno, pak count(*) <> id a mám problém dopočítat hodnotu start a špatně mi stránkuje výpis.

To id je používané v odkazu např. pro výběr první zobrazené věty ze zobrazených 10 a potřebuju k němu dopočítat odpovídající položku start.

Je nějak možné zjistit fyzické pořadí věty v tabulce?

Díky předem.
DJ Miky
Profil
jio
Do parametru LIMIT se nepočítají vymazané řádky ani hodnota id... Když dáte LIMIT 0,10, tak se Vám vypíše prvních deset záznamů - ty mohou mít id třeba 1,2,4,5,7,11,156,1852,.... To je jedno.
jio
Profil
Díky za odpověď. Já vím, že to tak je, že položka start v limit určuje fyzické pořadí věty.

Já potřebuju najít nějakou vazbu mezi tím fyzickým pořadím věty a tím zadaným id abych ho mohl v LIMIT použít. Chci vypsat následujících 10 vět a zároveň zjistit id o 10 vět níže s id DESC where id<=$id.

Nějak jsem se do toho zamotal, ale snad je vidět o co mi jde.

Upravuju stávající poměrně dlouhý skript, který bych jinak musel napsat celý znovu.
Hugo
Profil
jio

Pouzivej podminku WHERE.

Napr. pomoci

DELETE FROM tab WHERE ID IN (5,12,25);

Smazes polozky s ID 5, 12 a 25.
http://www.linuxsoft.cz/article.php?id_article=819
finc
Profil
"v tabulce mám sloupec id, na kterém je primární klíč a při vložení nové věty se vždy přečte Max(id) a založí se věta s id+1. "

proboha, proč nepoužijete auto_increment???
jio
Profil
Hugo
Díky, ale já nemám problém s vymazáním více položek. Já řeším problém se stránkováním. Vím, že už to tady bylo, ale nepodařilo se mi přes hledání najít řešení.

Potřebuju najít:
- odpovídající start po zadané id
- id věty, která je o 10 řádků níže
- id věty, který je o 10 řádků výše
jio
Profil
finc
auto_increment, ano používám ho, jen jsem to tady nechtěl rozepisovat.
Hugo
Profil
jio

Aha, ja to jen preletel ocima, ale to je uplne jedno. Princip je stejny.

SELECT ... WHERE ID > 25 LIMIT 10
finc
Profil
LIMIT 0, 10
LIMIT 10, 20
finc
Profil
SELECT ... WHERE ID > 25 LIMIT 10
Tohle ale není přesné a nevybere to řádky od 26 po 36, podle toho jak jsi psal. Pokud id=25 není na 25 řádku, tak je to špatně.
Toto se řeší limitem.
jio
Profil
finc
LIMIT 0, 10
LIMIT 10, 20

Mohl byste to trošku rozvést?
Hugo
Profil
finc

Naopak, to je presne. Pokud pouzijes jen limit 10,20 a mas v ID napr. cisla 0-5 a pak 7-25, tak nevyberes to co chces.
finc
Profil
Pro stránkování je navíc potřeba zjistit celkový počet záznamů v tabulce. MySQL má na toto fintu (pokud mám v selectu LIMIT)

SELECT SQL_CALC_FOUND_ROWS * FROM table

SELECT FOUND_ROWS()
jio
Profil
Hugo
aha, už rozumím
finc
Profil
Hugo

Co? Vyberu věty z tabulky jak jdou za sebou. Záleží na ORDER BY

SELECT * FROM table ORDER BY nazev LIMIT 10, 20
// názvy podle abecedy, kde select vrátí názvy 10 až 20
Hugo
Profil
finc

Dotaz je: Mam ID a chci vybrat 10 polozek bud s vyssim ID nebo s nizsim. To ti samotny limit nezajisti. Musis pouzit podminku where, kde nastavis ID a pak pomoci limitu jen zkrouhnes pocet radku, ktere se vyberou.
finc
Profil
SELECT * FROM table ORDER BY ID LIMIT 0, 10

SELECT * FROM table ORDER BY ID LIMIT 10, 20

V čem je problém?
finc
Profil
A k tomu můžu přidat nějakou where podminku odkud se má ID brát id > 10
Hugo
Profil
Mas tyto ID v tabulce 1-5, 8-30 a chces vybrat radky od ID 10

SELECT * FROM table ORDER BY ID LIMIT 10, 20

Ti vybere 10 radku, ID prvniho bude 13
Hugo
Profil
A k tomu můžu přidat nějakou where podminku odkud se má ID brát id > 10

No, a tim dostanes to co tu pisu ja.
finc
Profil
Jo takhle, asi toho je na mě moc. :)
Mě zmátlo to, že to dotazující chce použít pro stránkování, což by toto bylo k ničemu. :)
jio
Profil
Díky pánové.
Ano, chci to použít pro stránkování. Našel jsem mezitím jiné řešení u Jakuba Vrány.

Přesto ať jsem v obraze tak se ještě zeptám. Je vůbec nějak možné zjistit fyzickou pozici věty v tabulce?
Hugo
Profil
Treba takto

select Count(*) from tabulka where ID < 25
jio
Profil
Jo díky, jednoduché. Taky mě to mohlo napadnou samého.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0