Guziczki "następne/poprzednie" zdjęcie

0

Witam serdecznie,
Mam taką tabelę:

CREATE TABLE IF NOT EXISTS `zdjecia` (
  `bf_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `idusera` int(11) NOT NULL,
  `idgalerii ` int(11) NOT NULL,
  `nazwa` varchar(85) COLLATE utf8_unicode_ci DEFAULT NULL,
  `miejsce` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
  `obrazek` varchar(65) COLLATE utf8_unicode_ci DEFAULT NULL,
  UNIQUE KEY `bf_id` (`bf_id`),
  UNIQUE KEY `bf_id_2` (`bf_id`),
  KEY `bf_id_3` (`bf_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

Mam 2 listy zdjęć/galerie (różniące się sortowaniem):

1. SELECT bf_id, obrazek, miejsce, nazwa  FROM zdjecia  where idusera=:idusera and miejsce=:miejsce  ORDER by nazwa ASC;
2. SELECT obrazek, idgalerii, nazwa, miejsce, bf_id  FROM zdjecia  where idgalerii=:idgalerii   ORDER by nazwa ASC;

Potrzebuję dla obu list w podglądzie zdjęcia zrobić guziczki "następne zdjęcie" oraz "poprzednie zdjęcie".

Mam aktualnie taki kod dla pkt1:

SELECT  bf_id FROM zdjecia  where miejsce=:miejsce   and bf_id = (SELECT MIN(bf_id) FROM zdjecia WHERE bf_id>:idobecne)   ORDER by nazwa ASC  LIMIT 1;

SELECT  bf_id FROM zdjecia  where miejsce=:miejsce  and bf_id = (SELECT MAX(bf_id) FROM zdjecia WHERE bf_id<:idobecne)   ORDER by nazwa ASC  LIMIT 1;

oraz dla pkt 2:

SELECT MIN(bf_id) as bf_id FROM zdjecia  where bf_id>:bf_id and idgalerii=:idgalerii   ORDER by nazwa ASC LIMIT 1;

SELECT MAX(bf_id) as bf_id FROM zdjecia  where bf_id<:bf_id and idgalerii=:idgalerii   ORDER by nazwa ASC LIMIT 1;

Użytkownik może:
a) wejść w dowolne miejsce w galerii aby je podejrzeć
B) lista zdjęć oraz strzałki poprzednie zdjęcie/następne zdjęcie muszą mieć taką samą kolejność w wyświetlaniu.

W chwili obecnej strzałki nie pokrywają się z kolejnością :-(

Ma ktoś może pomysł jak naprawić moje zapytania? Jak one powinny wyglądać żeby to wyglądało poprawnie?

Bardzo proszę o pomoc,
Northwest

0

Jeśli sortujesz po nazwie, to nie możesz korzystać z id, tylko z nazwy.
więc twoje zapytanie nie będzie wyglądać tak:

SELECT  bf_id FROM zdjecia  WHERE miejsce=:miejsce   AND bf_id = (SELECT MIN(bf_id) FROM zdjecia WHERE bf_id>:idobecne)   ORDER BY nazwa ASC  LIMIT 1;

tylko tak:

SELECT  bf_id FROM zdjecia  WHERE miejsce=:miejsce   AND nazwa = (SELECT nazwa FROM zdjecia WHERE nazwa>:nazwaobecna LIMIT 1)  ORDER BY nazwa ASC  LIMIT 1;

Specjalnie też w środku użyłem LIMIT 1, które powinno być szybsze.

0

niestety nie działa to bardzo :(

0

kombinuję też z czymś takim: SELECT id FROM zdjecia WHERE id>:id and idgalerii=:idgalerii and enable ='1' ORDER BY nazwa DESC LIMIT 0,1;

jednak skrypt głupieje w momencie gdy są takie same nazwy zdjęć

1 użytkowników online, w tym zalogowanych: 0, gości: 1