Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Pobranie kilku rekordow do jednej daty
mateusz.it
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.04.2011

Ostrzeżenie: (0%)
-----


Witam, mam problem z pobraniem kilku rekordów do jednej daty. Zobrazuj strukturę:

Tabela data:
Kod
id     nazwa                    data ( w formacie  timestamp)
1      jakas nazwa           123456789
2      jakas nazwa dwa    324234234


I teraz chciałbym pobrać to w formacie wylistowanych dat. To znaczy na przykład:
28 kwietnia 2011:
jakas nazwa
jakas nazwa dwa
jakas inna nazwa dodana 28 kwietnia

27 kwietnia 2011:
jakas nazwa dodana 27 kwietnia
jakas nazwa jak wyzej


itd.

Jakieś wskazówki? Może w ogóle przerobić strukturę bazy?

Za wszystkie rady z góry dziękuje!
Go to the top of the page
+Quote Post
Ulysess
post
Post #2





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


musisz date z postaci np 28-04-2011 przekształcić w Unixowy uzywajac strtotime a jak chcesz z całego dnia to tak jak napisałem wcześniej + 28-04-2011 23:59:59 zamienic na unixowy i w zapytaniu uzyc between z min i max zakresem czasowym
Go to the top of the page
+Quote Post
mateusz.it
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.04.2011

Ostrzeżenie: (0%)
-----


Data w bazie już jest w formacie unixowego timestampa. Okej, w zapytaniu dać BETWEEN, to w pętli mam jechać wszystkie dni po kolei? A jak na przykład była miesięczna przerwa w dodawaniu rekordów, to i tak będę musiał jechać zapytanie po zapytaniu, dzień po dniu, trochę mało to optymalne headsetsmiley.png

Na prawdę nie ma jakiegoś innego rozwiązania?
Go to the top of the page
+Quote Post
Ulysess
post
Post #4





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


hmm nie wiem czy dobrze rozumiem ale masz np 100 dat w postaci unixowej i z tych 100 dat chcesz wydobyć unikalne dni czyli np 25 kwietnia 28 kweitnia itd questionmark.gif
wydaje mi się że w takim wypadku lepiej trzymać date w postaci date - rok miesiac dzien lub datetime to co wcześniej plus godziny minuty sekundy
Go to the top of the page
+Quote Post
mateusz.it
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.04.2011

Ostrzeżenie: (0%)
-----


Tak, w bazie mam sto rekordów, z datą dodania i chce je uporządkować według dni. Sęk w tym, że dla jednego dnia, może przypaść kilka rekordów i trzeba je wszystkie wyświetlić.

Format daty zawsze mogę zmienić, to nie problem, gorzej z wymyśleniem sensownego, w miarę optymalnego zapytania smile.gif
Go to the top of the page
+Quote Post
Ulysess
post
Post #6





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


to skoro możesz to zmień wink.gif jeżeli potrzebne ci szczegoły godzinowe to użyj datetime jeśli wystarcza same dni to użyj date w zapytaniu robisz wtedy WHERE `date` BETWEEN '2011-04-01' AND '2011-04-28'

następnie uzywasz pętli while i masz wszystkie rekordy pobrane z tego przedziału wink.gif
pamiętaj że format jest rok-miesiąc-dziień / a co do aktualnych to ja bym je pobrał z bazy a następnie $data = date('Y-m-d',$aktualna_data_unix_z_bazy);
i dodajesz $date do nowego pola w bazie z typem "date" wink.gif
Go to the top of the page
+Quote Post
mateusz.it
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.04.2011

Ostrzeżenie: (0%)
-----


Ulysess, nie rozumiesz mnie, albo to ja kiepsko opisuje problem headsetsmiley.png

Potrzebuje mieć te daty w formacie:

28 kwietnia 2011:
-rekord osmy
-rekord siodmy
-rekord szosty

25kwietnia 2011:
-rekord piaty
-rekord czwarty

01 kwietnia 2011:
-rekord trzeci
-rekord drugi
-rekord pierwszy


Poszukuje jakiegoś w miarę optymalnego zapytania SQL, które najpierw pobierze mi datę, później pobierze rekordy, które dodane były tej daty, następnie pobierze kolejną datę, w której jakiś rekord był dodany, następnie właśnie te rekordy, itd, itd. Nie chce też lecieć w pętli dzień po dniu od 2000 roku, mimo tego, że w przeciągu 11 lat dodane były na przykład tylko cztery rekordy.

Nie chcę rozwiązania, które mi przedstawiasz:
01-28 kwietnia 2011:
-rekord ósmy
-rekord siódmy
-szósty
-piąty
-itd...

Mam nadzieje, że już ktoś zrozumiał i będzie potrafił mnie nakierować na poprawne rozwiązanie smile.gif

Ten post edytował mateusz.it 28.04.2011, 20:55:48
Go to the top of the page
+Quote Post
Ulysess
post
Post #8





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

Ostrzeżenie: (0%)
-----


hmm chyba rozumiem smile.gif

hmm to może zrób zapytanie z DISTINCT(`date`) w taki sposób pobierzesz unikalne dni następnie przypisuj je w pętli do zmiennej np $data[$numer] = $data_z_powyzszego_zapytania;

następnie
  1.  
  2. $suma = count($data)-1;
  3.  
  4. for($a=0;$a<=$suma;++$a)
  5. {
  6. // tutaj robisz zapytanie pobierajace z danego dnia a w where wstawiasz date = '.$data[$a].'
  7. echo $data[$a];
  8. while($dane = mysql_fetch_assoc($powyzsze_zapytanie))
  9. {
  10. // wysweitlasz dane
  11. }
  12.  
  13. }

możliwe ze cos pomieszałem i ze jest bardziej optymalny sposób ale to na początek powinno zadziałać wink.gif
Go to the top of the page
+Quote Post
mateusz.it
post
Post #9





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 28.04.2011

Ostrzeżenie: (0%)
-----


Dokładnie, perfect! Jesteś wielki thumbsupsmileyanim.gif
Go to the top of the page
+Quote Post
bogusborek
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 1
Dołączył: 6.01.2010

Ostrzeżenie: (0%)
-----


Można jedną datę zapamiętać pod zmienną i używać w ten sposób.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 17:59