Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pokaż rekordy od.... do....
Forum PHP.pl > Forum > Bazy danych > MySQL
Ekoday
Witam serdecznie wszystkich,

na wstępie nadmienię iż dopiero raczkuję w php i mysql. Tworząc jakiś tam wydumany przez siebie projekt napotkałem na następujący problem:

Posiadam kod, który wypełnia mi tablicę danymi. Tablica składa się z 3 pól: id, dane oraz sprawdz. Po wypełnieniu wygląda tak:
1. 2013_04_24/17:02:11 ok
2. a
3. b
4. c
5. 2013_04_24/17:02:45 ok
6. a
7. b
8. c
9. d
10. 2013_04_24/17:02:46 ok
11. a
12. b
13. c
14. d
15. e
Kulumna 1. to id, kolumna druga to dane(a,b,c bądź data) kolumna trzecia to "ok", które występuje tylko przy dacie.
Pytanie brzmi, w jaki sposób mogę wyświetlić dane od rekordu zaczynającego się określoną datą - np. 2013_04_24/17:02:45 - czyli rekordy od 5.- 9. nie znając poszczególnych id? Dokładniej rzecz ujmując, chciałbym kliknąc na stronce jedną z dat która mi się wyświetli i uzyskać wszytskie dane które są zamieszczone pomiędzy nią, a tą następną.

Z góry bardzo dziękuję za zainteresowanie i zaangażowanie.

Pozdrawiam
pmir13
To jest do zrobienia, ale prawdę powiedziawszy nie powinieneś dostać odpowiedzi, bo widząc taką strukturę danych to nóż się otwiera w kieszeni.
Raczkujesz, więc nie utrwalaj sobie złych nawyków. Jeśli przykładowo skasujesz jakąś datę to co z pozostałymi danymi? Mają przejść na poprzednią? Czy znowu masz szukać następnej i kasować również wszystko aż do niej?
Prawidłowo powinno wyglądać to tak, że masz dwie tabele, w jednej trzymasz dane z datami i tymi 'ok' a w drugiej odpowiadające im 'a','b' i tak dalej.
Przykładowo tabela `pytania` (to tylko domysł co te dane mają modelować) mogłaby mieć kolumny id, czas, sprawdz, natomiast tabela `odpowiedzi` id, id_pytania, dane.
Czyli klasyczna relacja jeden do wielu, gdzie id_pytania w tabeli odpowiedzi jest zewnętrznym kluczem do id w tabeli pytania.
Wówczas wystarczyłoby:

  1. SELECT o.dane FROM pytania p JOIN odpowiedzi o ON p.id = o.id_pytania WHERE p.czas='2013_04_24/17:02:11'


Swoją drogą te daty (i czasy) powinny być typu DATETIME, mysql udostępnia tłum funkcji i operatorów do działań na datach nie po to żeby zapełnić czymś manual i nie świecił pustkami.
Zwykłe odjęcie jakiegoś odstępu czasu by odpowiedzieć na proste pytanie które rekordy powstały w ciągu ostatniego miesiąca to w przypadku pola DATETIME: czas - INTERVAL 1 MONTH, a na stringu wymaga to konwersji i wielu obliczeń, pamiętania o jakichś bzdurach typu rok przestępny itp, ewentualnie korzystania z funkcji zewnętrznego języka. I po co, skoro mysql robi to bezbłędnie i szybko?
Oczywiście jeśli w tym samym polu trzymasz jakieś 'a' to naturalnie ustawienie DATETIME nie jest możliwe, ale po rozdzieleniu można przynajmniej zrobić to prawidłowo.
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.