Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Następny i poprzedni rekord
Forum PHP.pl > Forum > Przedszkole
trifek
Witam.
Mam wiele rekordów z identyczną datą. Wpisy w bazie nie są dodawane chronologicznie.

Baza z przykładowymi danymi: https://pastebin.com/L32J1wpX

Baza posiada listę ze zdjęciami, które wyświetlam za pomocą zapytania:

  1. SELECT * FROM psGalleryCategories WHERE enable = 1 ORDER BY date DESC.


Wchodzę w rekord o id = 19 (id_categories_of_photos = 19) i chciałbym wyświetlić poprzedni i kolejny rekord (z uwzględnieniem dat).

Próbowałem takie coś:

Prv:
  1. SELECT * FROM psGalleryCategories WHERE id_categories_of_photos != :id_categories_of_photos AND date <= :date AND enable = 1 ORDER BY date DESC LIMIT 1;



Next:
  1. SELECT * FROM psGalleryCategories WHERE id_categories_of_photos != :id_categories_of_photos AND date >= :date AND enable = 1 ORDER BY date DESC LIMIT 1;




Ale nie działa. Zwraca błędny wynik. Jak to naprawić?

trueblue
Jeśli zdarzają się daty równe, to po pierwsze nie wybierzesz rekordu przed lub po ze względu na nierówność słabą. Musiałaby być nierówność ostra, ale nie na dacie, lecz na kluczu, który wprowadza tą chronologię. Wtedy poprzedni rekord to < i DESC, następny to > i ASC.
Tomplus
next row
  1. SELECT * FROM psGalleryCategories WHERE enable = 1 AND id_categories_of_photos = (SELECT min(id_categories_of_photos ) FROM psGalleryCategorieswhere WHERE id_categories_of_photos > :id_categories_of_photos) ORDER BY date DESC;

prev row
  1. SELECT * FROM psGalleryCategories WHERE enable = 1 AND id_categories_of_photos = (SELECT min(id_categories_of_photos ) FROM psGalleryCategorieswhere WHERE id_categories_of_photos < :id_categories_of_photos) ORDER BY date DESC;

miccom
Ja dałbym datę jako timestamp, wtedy możesz wyciągać dane po liczbach co jest łatwiejsze i szybsze od operacji na dacie smile.gif
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.