![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 231 Pomógł: 2 Dołączył: 2.08.2006 Skąd: Poznań Ostrzeżenie: (10%) ![]() ![]() |
Witam,
w jaki sposób można na podstawie daty: 19:20:13 2010-08-06 odnaleźć poprzedni i następny wpis za pomocą zapytania postgresie. Datę jak i godzinę trzymam w tabeli w polu tabelka_data(DATE), tabelka_czas (TIME). ![]() Ten post edytował user123 7.08.2010, 22:10:40 -------------------- Youtube - Miedzynarodowa wersja: Wyposażenie siłowni
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
UNION SELECT + odpowiednie warunki dla kolejnych zapytan
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 231 Pomógł: 2 Dołączył: 2.08.2006 Skąd: Poznań Ostrzeżenie: (10%) ![]() ![]() |
właśnie chodzi mi o te warunki w jaki sposób w postgresie można porównać daty, bo raczej zwykle WHERE tabelka_data < $data nie wystarczy gdyż mogą to być wpisy z tego dnia lub z następnego czy jest może jakaś sprytna funkcja lub metoda na to?
-------------------- Youtube - Miedzynarodowa wersja: Wyposażenie siłowni
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Po prostu źle zrobiłeś na etapie projektowania. Kolumna powinna być jedna typu timestamp. Byś teraz się nie grzebał. A tak nie napiszesz normalnego warunku, bo Ci zawsze kolumna godziny zawadzać będzie i rozwali całą logikę zapytania.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Thek ale jakoś nie widzę by te dwie kolumny robiły jakiś wielki problem... Union tak jak już ktoś tam wyżej pisał.
-------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Robią problem. Sam z początku myślałem, że walnąć union i zapytanie w stylu
Ale to zapytanie zwróci fałszywe wyniki, ponieważ tabelka_czas obetnie nam prawidłowe wyniki jeśli rekordy kolejne będą z różnych dni, bo tabelka_czas nam wywali rekordy z następnego dnia sprzed godziny tabelka_czas, choć jakieś mogą być. Nie można także z WHERE wyrzucić sprawdzania po tabelka_czas bo wybierze wszystkie rekordy z tego dnia... Także wcześniejsze/późniejsze od niego. Rozbicie tego czasu na 2 kolumny było moim zdaniem nieprzemyślane trochę. Inna sprawa... Czy autor nie ma przypadkiem kolumny id z autoincrement? Przecież ona może zrobić za "datę". Wiele osób myśli tylko o datach, nie zauważając, że autoincrement może tę samą funkcję pełnić. Każdy kolejny rekord jest bowiem z wyższym numerem a więc i młodszy jednocześnie. Wystarczy więc wybrać najbliższy rekord o większym i mniejszym id, który może być wyświetlony userowi (to niekoniecznie o 1 mniejszy/większy) by rozwiązać problem. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
thek ale ja dalej nie widzę problemu, dlaczego do jasnej cholery nie połączysz tych dwóch kolumn w zapytaniu. I masz kolumnę ala timestamp. A co prawda to prawda, głupotą jest rozbijanie daty na dwie kolumny
![]() Ten post edytował cojack 9.08.2010, 08:47:48 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Postulujesz CONCAT_WS( ' ', tabelka_data, tabelka_czas ) >= $złaczona_data_i_czas_w_php ? To trzeba by sprawdzić czy zadziała prawidłowo. Niby powinno, ale różne cuda się zdarzają i dlatego mam do tego typu rozwiązań uprzedzenie.
Swoją drogą myślę, że sensownie zaprojektowany system pozwoliłby na olewkę dat, a właściwie byłyby one tylko do celów informacyjnych, a nie kryteriami w SQL ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Jak wrócę do domu to się pobawię ;] Eeee to nie takie łątwe jak by się to chciało na samych datach zrobić, w union nie można skakać po aliasach tabel. ale lipa.
Ten post edytował cojack 9.08.2010, 19:18:32 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]() ![]()
Post
#10
|
|
![]() Administrator serwera Grupa: Developerzy Postów: 521 Pomógł: 13 Dołączył: 2.04.2004 Skąd: 52°24' N 16°56' E Ostrzeżenie: (0%) ![]() ![]() |
A ja bym użył funkcji EXTRACT z warunkiem epoch na polu tabelka_data i następnie dodał do niego liczbę sekund z pola tabelka_czas. Wtedy wyszukanie poprzedniego i następnego postu jest trywialne
![]() -------------------- Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..." Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL" |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Ja wymyśliłem tylko coś takiego:
Może data dodania nie odzwierciedla tego że po polu serial można to zrobić szybciej, ale już po dacie aktualizacji widać to gołym okiem że nie zrobimy to na serialu. Ten post edytował cojack 10.08.2010, 08:50:29 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.06.2025 - 16:56 |