Autor | Zpráva | ||
---|---|---|---|
jio Profil |
#1 · Zasláno: 19. 7. 2006, 12:54:29
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 |
#2 · Zasláno: 19. 7. 2006, 13:10:45
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 |
#3 · Zasláno: 19. 7. 2006, 13:26:43
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 |
#4 · Zasláno: 19. 7. 2006, 13:31:35
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 |
#5 · Zasláno: 19. 7. 2006, 13:33:23
"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 |
#6 · Zasláno: 19. 7. 2006, 13:36:18
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 |
#7 · Zasláno: 19. 7. 2006, 13:37:42
finc
auto_increment, ano používám ho, jen jsem to tady nechtěl rozepisovat. |
||
Hugo Profil |
#8 · Zasláno: 19. 7. 2006, 13:37:48
jio
Aha, ja to jen preletel ocima, ale to je uplne jedno. Princip je stejny. SELECT ... WHERE ID > 25 LIMIT 10 |
||
finc Profil |
#9 · Zasláno: 19. 7. 2006, 13:37:53
LIMIT 0, 10
LIMIT 10, 20 |
||
finc Profil |
#10 · Zasláno: 19. 7. 2006, 13:39:45
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 |
#11 · Zasláno: 19. 7. 2006, 13:39:47
finc
LIMIT 0, 10 LIMIT 10, 20 Mohl byste to trošku rozvést? |
||
Hugo Profil |
#12 · Zasláno: 19. 7. 2006, 13:42:11
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 |
#13 · Zasláno: 19. 7. 2006, 13:43:11
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 |
#14 · Zasláno: 19. 7. 2006, 13:44:41
Hugo
aha, už rozumím |
||
finc Profil |
#15 · Zasláno: 19. 7. 2006, 13:44:59
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 |
#16 · Zasláno: 19. 7. 2006, 13:47:14
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 |
#17 · Zasláno: 19. 7. 2006, 13:48:53
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 |
#18 · Zasláno: 19. 7. 2006, 13:50:57
A k tomu můžu přidat nějakou where podminku odkud se má ID brát id > 10
|
||
Hugo Profil |
#19 · Zasláno: 19. 7. 2006, 13:51:08
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 |
#20 · Zasláno: 19. 7. 2006, 13:51:39
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 |
#21 · Zasláno: 19. 7. 2006, 13:53:35
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 |
#22 · Zasláno: 19. 7. 2006, 14:50:32
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 |
#23 · Zasláno: 19. 7. 2006, 14:53:13
Treba takto
select Count(*) from tabulka where ID < 25 |
||
jio Profil |
#24 · Zasláno: 19. 7. 2006, 15:18:22
Jo díky, jednoduché. Taky mě to mohlo napadnou samého.
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0