Galeria zdjęć - następne/poprzednie


(northwest) #1

Witam serdecznie,

Mam taką tabelę ze zdjęciami:

CREATE TABLE IF NOT EXISTS `zdjecia` (
`id` bigint(20) UNSIGNED NOT NULL,
  `user` int(11) NOT NULL,
  `nazwa` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  `datadodania` datetime NOT NULL,
  `enable` int(11) NOT NULL,
  `idgalerii` int(11) NOT NULL,
  `miejsce` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
  `obrazek` varchar(65) COLLATE utf8_unicode_ci DEFAULT NULL,
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
ALTER TABLE `zdjecia`
MODIFY `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=1;
 
ALTER TABLE `zdjecia`
 ADD UNIQUE KEY `id ` (`id `), ADD UNIQUE KEY `id_2` (`id `), ADD KEY `id_3` (`id `);

 

Mam zapytanie wyświetlające listę zdjęć:

SELECT * FROM zdjecia WHERE user =:user AND miejsce=:miejsce ORDER BY nazwa ASC;

 

Po kliknięciu w zdjęcie chce zrobić guziczki następne/poprzednie.

 

Jak powinny wyglądać zapytania dla tych guziczków?

 

Kombinuję z czymś takim:

SELECT id FROM zdjecia WHERE miejsce=:miejsce id > :idobecne ORDER BY nazwa ASC, id DESC LIMIT 1 // następne
SELECT id FROM zdjecia WHERE miejsce=:miejsce id < :idobecne ORDER BY nazwa ASC, id DESC LIMIT 1 // poprzednie

 

 

Tylko nie bardzo chce mi to działać sad.gif Tzn działa, ale np. e przypadku gdy mam 3 zdjęcia:

  • foto 1

  • foto 2

  • foto 3

 

i wybiorę foto 1 - to skrypt "widzi" zdjęcia "poprzednie" (np. 2) z kolei gdy wybiorę foto 3 - to skrypt "widzi" jedno zdjęcie "następne" - po czym poprawne wyświetla poprawnie...

 

Mógłby ktoś mi pomóc z tymi zapytaniami? 

 

Bardzo proszę o pomoc,

Northwest


(fedora24x) #2

Zrób sobie jakąś zmienna zawierającą bieżącą pozycje w bazie, i wczytuj określony wiersz?

Wpis z zdjęciem nie zajmuje dużo, pobierasz cała baze i spacerujesz po niej jak po tablicy.

A index możęsz trzymać w ciasteczku lub jak używasz PHP to w sesji. I masz…

 

a linki: następne, poprzednie to index.php?action=next lub index.php?action=back

metoda GET i if do tego, inkrementacja/dekrementacja indeksu w bazie??


(slepcu) #3

Myślę że twoim błędem jest Order by name w SQLu.

nie można w tym przypadku oczekiwać że następne ID będzie również kolejnym elementem po nazwie.

Lepiej dodać kolumnę tylko do kolejności i nie sortować w tym przypadku po name czy Id, tylko po tej kolumnie, lub:

Jak już chcesz tak robić jak masz, to zrób podzapytanie:

SELECT id FROM (
 SELECT id FROM zdjecia ORDER BY nazwa ASC
) zdjecia_ordered 
WHERE miejsce=:miejsce id > :idobecne ORDER BY id DESC LIMIT 1 // następne

Uwaga! na codzień nie piszę w MySQL tylko w MS SQL Server.