Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Wyświetlanie poprzedniego i następnego rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
sebekzosw
Witam!
Mam takie zapytanie:

Kod
(SELECT *, 'prev' AS `typ` FROM `sp_cms_zdjecia` WHERE `id` < 4 AND `album`=1 AND `status`='1' ORDER BY `id` DESC LIMIT 1)
UNION (SELECT *, 'selected' AS `typ` FROM `sp_cms_zdjecia` WHERE `id` = 4 AND `album`=1 AND `status`='1' LIMIT 1)
UNION (SELECT *, 'next' AS `typ` FROM `sp_cms_zdjecia` WHERE `id` > 4 AND `album`=1 AND `status`='1' ORDER BY `id` ASC LIMIT 1);


Potrzebne mi to będzie do galerii - będzie mi wyświetlało wybrane zdjęcie, następne i poprzednie. Jednak potrzebuje dorobić jeszcze wyświetlanie nr zdjęcia, np.: "Zdjęcie 15/100" - Jak mogę to zrobić?

Widziałem takie coś: http://nospor.pl/mysql-faq.html#faq-8 , jednak po wpięciu to do mojego kodu wywalało mi jakieś błędy ;/
nospor
Cytat
jednak po wpięciu to do mojego kodu wywalało mi jakieś błędy ;/
warto by więc kod co zrobiles oraz pokazać te bledy bysmy mogli ci pomóc - pewnie coś źle zrobiłeś.
sebekzosw
Kod
set @id=4,@nr = 0,  @idnr = 0;

(SELECT *, 'prev' AS `typ`, '' AS `nr` FROM `sp_cms_zdjecia` WHERE `id` < 4 AND `album`=1 AND `status`='1' ORDER BY `id` DESC LIMIT 1)
UNION (SELECT *, 'selected' AS `typ`, @idnr AS `nr` FROM `sp_cms_zdjecia`, (SELECT @nr:=@nr+1, if(`id`=@id, @idnr := @nr,@idnr=@idnr)) WHERE `id` = 4 AND `album`=1 AND `status`='1' LIMIT 1)
UNION (SELECT *, 'next' AS `typ`, '' AS `nr` FROM `sp_cms_zdjecia` WHERE `id` > 4 AND `album`=1 AND `status`='1' ORDER BY `id` ASC LIMIT 1);


proszę
nospor
1) Jak mowilem bys pokazał tez i bledy co dostajesz to wiesz co mialem na mysli?? Tak, zgadles, bys pokazał bledy co dostajesz. Czemu wiec ich nie podales?

2) Ty to do php wkladasz? To pokaz jak


Cytat
'prev' AS `typ`, '' AS `nr`

tekst prev jako nazwa kolumny typ..... pusty tekst jako nazwa kolumny nr.... co piles? winksmiley.jpg
sebekzosw
wywala mi takie błędy:
Kod
MySQL zwrócił komunikat:

#1248 - Every derived table must have its own alias



a co do `tekst prev jako nazwa kolumny typ`
źródło: http://nospor.pl/mysql-faq.html#faq-4 - robiłem z twojego poradnika

P.S.: Piłem 4 lechy
nospor
Cytat
a co do `tekst prev jako nazwa kolumny typ`
źródło: http://nospor.pl/mysql-faq.html#faq-4 - robiłem z twojego poradnika
jasne..... pokaż mi proszę w którym miejscu robię alias dla tekstu z kolumny? Jestem bardzo tego ciekaw, bo ja jakos tego nie widzę. smile.gif

Cytat
P.S.: Piłem 4 lechy
jak wytrzeźwiejesz i zaczniesz ciut jasniej myslec to wróc do postowania. do tego czasu krótki spacer dobrze ci zrobi winksmiley.jpg
sebekzosw
dobra, rzeczywiście - pomyliłem się może... a w takim razie mógłbyś jakoś pomóc w tym zapytaniu?
nospor
Cytat
pomyliłem się może...
waleczny do konca... nie może a na pewno.
Ty mój kod:
'prev' kol
zamieniles na:
'prev' AS `typ`
no troszę źle winksmiley.jpg

  1. SET @nr = 0, @id=5, @idprev = 0,@idprevfound=0, @idnext=0,@idnextfound=0;
  2. SELECT @nr:=@nr+1,
  3. IF(id<>@id AND NOT @idprevfound, @idprev := id,IF(@idprevfound,NULL,@idprevfound:=1)),
  4. IF(id=@id, @idnextfound := 1,IF(@idnextfound AND NOT @idnext,@idnext := id, NULL)) FROM tabela1 ORDER BY pole;
  5. SELECT @idprev prev, @idnext next;

To są 3 oddzielne zapytania dla php. Kazdy musi przejsc przez oddzielne mysql_query.
  1. SET @nr = 0, @id=5, @idprev = 0,@idprevfound=0, @idnext=0,@idnextfound=0;

  1. SELECT @nr:=@nr+1,
  2. IF(id<>@id AND NOT @idprevfound, @idprev := id,IF(@idprevfound,NULL,@idprevfound:=1)),
  3. IF(id=@id, @idnextfound := 1,IF(@idnextfound AND NOT @idnext,@idnext := id, NULL)) FROM tabela1 ORDER BY pole;

  1. SELECT @idprev prev, @idnext next

Twoje dodatkowe zadanie to wstawic tylko nazwe swojej tabeli, warunków, sortowania i rekordu którego szukasz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.