Autor Zpráva
Duum
Profil *
Zdravim, chtěl bych se zeptat, jak zjistím na kterém řádku se nachází hodnota v MySQL? Mám fotogalerii, která se stránkuje v malých náhledech. Když kliknu na náhled zobrazí se nová stránka se většenou fotkou a dalším stránkováním, tedy kliknu na fotku zobrazí se mi veliká a nad ní jsou šipky pro pohyb v plné velikosti. Vše mi funguje pře hodnotu ID při každém přidání se mi do ID přičte 1. A když vyvolám plnou velikost přes limit se mi zobrazí pomocí ID ta fotka. Ale když nějaký zýznam smažu, tak se mi zbytek posune nahoru třeba takto: Jsou záznami s ID 1, 2, 3, 4, 5, 6, 7, 8.... Když smažuzáznam 6 tak půjdou po sobě takto: 1, 2, 3, 4, 5, 7, 8... Tudíš když vyolám fotku s id 7 zobrazí se mi fotka s ID 8 protože je na jejím místě. Vše by se vyřešilo, kdyby se do odkazu s limitem místo hodnoty ID ukládala pozice v tabulce. Tedy při každém volání by se tam uvedl řádek, na kterém se záznam nachází a bylo by po problému. Ale problém je v tom, jak zjistím pozici v databázi? Pokud to někdo víte, zkuste prosím pomoci zatím ahoj
Kajman_
Profil *
Není lepší volat fotky s id z databáze? Jinak se Vám nezachovají externí odkazy při tom mazání.

Jinak tady
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=3 7836
je ukázka číslování řádků (i hledání dalšího a předchozího záznamu pokud použijete id z db a chcete přeskočit díry).
Duum
Profil *
Tento příklad moc nechápu, já s MySQL teprv začínam, sice to možná chápu, ale možná by neuškodilo, kdyby jste se mi o prosím někdo zkusil vysvětlit.
Duum
Profil *
Prosím může mi to někdo trochu vysvěltilt?
Kajman_
Profil *
V MySQL číslo řádku samo o sobě neexistuje.

Můžete dát
order by id limit 6, 1
pokud chcete sedmou fotku podle id.
Duum
Profil *
Ano, já kliknu na nějakou fotku, která si v url nese proměnou která uvádí celkový počet fotek a druhá, která uvádí ID tím se nastaví (limit celkový počet, (id-1) řazeno pospátku)... Vše funguje jak má, ale když smažu nějaké foto, tak fotka sedmá v pořadí třeba ponese id 9 a při stanovení limitu to tedy dělá neplechu. Ještě mě tedy napadlo, že by při každém mazání se aktualizovali hodnoty id aby byly posloupně za sebou.
Kajman_
Profil *
Tak to nepočítejte pozpátku a jen to obráceně seřaďte. Žádný celkový počet nepotřebujete.

A pokud máte ID a ne číslo v pořadí, tak stačí
select * from fotky where id=$ID


Ale možná by neuškodilo, kdyby jste si o mysql něco přečetl.
http://www.linuxsoft.cz/mysql/
Duum
Profil *
Já se omlouvám, už jsem byl trochu mimo... :-D Ten limit je dělán tak to:
limit ".($id-1).", 1
Hodnota id se přenese pomocí proměnné z url a stanoví se limit. Pozpátku to mám řazené úplně celé, jako celý skript, protože když někdo klikne na nejnovější foto, tak aby se zobrazilo na začátku a když klikne na šipku do leva abyse posunul zpátky a né do předu. Ale to už je jen otázka projíždění fotek ve zvětšeném tvaru. To s hodnotou id nemá nic společného.
Kajman_
Profil *
Odečíst a přičíst jedničku v php snad umíte, ne? Takže pokud berete fotku tím limitem, nic jiného přece nepotřebujete.
Duum
Profil *
Ano... Ale každá fotka si nese svoje unikátní id, nahraje se nové foto vezmese se největší id přičte se jedna a takhle pořád do kola. Jenže když nějakou fotku smažu, tak smažu i jedno id a tedy hodnoty id nepůjdou za sebou. Když nese odkaz proměnou id pro sestavení limitu, tak fotka pro limit může nést jiné id v důsldku toho že něco před ní bylo smazáno a ona je o záznam výš, tedy pro sestavení limitu uvádí své id které ale neodpovídá v limitu. Zobrazí se jiná fotka...
Duum
Profil *
Já už nevím jak to vysvětlit.... :-D Jo počkejte, já mam tuto galerii na jednich stránkách, www.minibike.hustej.net/vase_foto.php Zde si to můžete prohlídnout v akci. Akorát že v tomto nemažu.
Kajman_
Profil *
Pokud používáte teď proměnou id k vyhledání fotky tím limitem, tak nehledáte pravé id, ale pořadí. Proto stačí +1 -1.

Pokud chcete používat proměnou id jako pravé id, dejte where id=$id
další je
select id from fotky where id>$id order by id limit 1
předchozí je
select id from fotky where id<$id order by id desc limit 1

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0