Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] zapytanie do bazy danych
AndyPSV
post 2.02.2006, 21:32:49
Post #1





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


Witam,
chcialbym wybrac rekordy z bazy danych, ktore zostaly wprowadzone w 3 ostatnich dniach. Format pola `date`: dzien-miesiac-rok godziny:minuty.
Przedstawiam kod i prosze o jego poprawe/wytlumaczenie czemu to co napisalem nie dziala (chodzi o linijke po AND - zaznaczam, ze bez niej wszystko dziala prawidlowo).
  1. SELECT *                          
  2. FROM `<span
  3. style='color:red'>'.PREFIX.'news`
  4. WHERE `accepted` = 1 AND (`date` BETWEEN SUBDATE(DATE_FORMAT(NOW(), "%d-%m-%Y %h:%i"), INTERVAL 3 DAY) AND DATE_FORMAT(NOW(), "%d-%m-%Y %h:%i"))
  5. ORDER BY `id` DESC LIMIT 0, '.NEWS_ON_PAGE.'


Pozdrawiam !

Edit. Sor za bledy, poprawione.

Ten post edytował AndyPSV 2.02.2006, 21:43:12
Go to the top of the page
+Quote Post
mike
post 2.02.2006, 21:38:41
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


1. Zły bbCode. Do zapytań używamy [ sql ] a nie [ php ] Proszę poprawić.
2. Jaki to ma związek z php? Przenoszę na Bazy danych
Go to the top of the page
+Quote Post
SongoQ
post 2.02.2006, 23:35:31
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Powinno byc

  1. ....... NOW() - INTERVAL ... AND NOW() .............


--------------------
Go to the top of the page
+Quote Post
AndyPSV
post 3.02.2006, 17:38:57
Post #4





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


Nie dziala - wyskakuje, ze jest 0 newsow. NOW(), jesli dobrze sie orientuje nie dopasowywuje sie do dowolnego formatu.

Ma ktos jakis pomysl ?

Ten post edytował AndyPSV 3.02.2006, 17:48:26
Go to the top of the page
+Quote Post
SongoQ
post 3.02.2006, 18:31:12
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Bo pewnie masz inny typ. Pokaz strukture.


--------------------
Go to the top of the page
+Quote Post
AndyPSV
post 3.02.2006, 19:13:35
Post #6





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


Pole `date` mam typu varchar(255).
Co w takim razie musze zrobic, aby zachowac format daty ?
Go to the top of the page
+Quote Post
Kinool
post 3.02.2006, 19:15:25
Post #7





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

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


uzyc pola ktore jest stwozone do przechowywania czasu smile.gif np DATE, DATETIME, YEAR itp zalezy co chesz przechowywac smile.gif jesli sama date to DATE


--------------------
Go to the top of the page
+Quote Post
AndyPSV
post 3.02.2006, 19:55:02
Post #8





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


Wracajac do problemu - mam pole typu varchar(255) i chce koniecznie zachowac format: dzien-miesiac-rok godziny:minuty. W polach typu TIMEDATE format jest przestawiony. Chce wyswietlic newsy dodane w czasie 3 ostatnich dni.
Jak to zrobic bez zmiany formatu, aby dzialalo. Prosze o pomoc !
Go to the top of the page
+Quote Post
dr_bonzo
post 3.02.2006, 20:06:45
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Przeciez mozesz zmienic format wyswietlania daty i skonwertowac format daty wprowadzanej do aplikacji do formatu bazy danych. Duzo latwiej jest operowac w bazie na datach przechowywanych w odpowiednich dla nich typach.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
spenalzo
post 3.02.2006, 20:10:02
Post #10





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


A ja sugeruje przechowywać date jako liczbe - zapisywać czas w formacie unixowym. Jest to dla mnie najwygodniejsze rozwiązanie, gdyż wszystkie operacje na dacie to są zwykle działania matematyczne.
Potrzebujesz odjąć 1h i 5 min od daty w bazie? Nie ma sprawy: "data - 3900" i załatwione.
Plusem tego rozwiązania jest to, że możesz sobie dowolnie formatować wynik przy użyciu funkcji php albo MySQL.


--------------------

Go to the top of the page
+Quote Post
SongoQ
post 3.02.2006, 21:02:30
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
A ja sugeruje przechowywać date jako liczbe - zapisywać czas w formacie unixowym.

A slyszales o czyms takim jak timestamp?questionmark.gif Radze zajrzec do manuala. Odnosnie prezentacji przy wyciaganiu danych jest w MySQL bardzo wiele funkcji. Nie ma sensu na nowo odkrywac ameryke. Po to takie pola sa zeby z nich korzystac a nie wymyslac rzeczy - raz nie optymalne a 2 ktore sie beznadziejnie uzywa.


--------------------
Go to the top of the page
+Quote Post
spenalzo
post 3.02.2006, 21:27:36
Post #12





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Czasami nad wydajność stawiam wygode korzystania z danych rozwiązań. Dla mnie jest najwygodniejsze korzystanie z tego co opisalem - i nie spodziewam sie że jest to niewydajne.


--------------------

Go to the top of the page
+Quote Post
SongoQ
post 3.02.2006, 21:41:52
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Czasami nad wydajność stawiam wygode korzystania z danych rozwiązań. Dla mnie jest najwygodniejsze korzystanie z tego co opisalem - i nie spodziewam sie że jest to niewydajne.


Ta, oczywiscie i nie przejmujesz sie ze zapytanie trwa np 10 s?. Jesli jest typ do tego stworzony i dodatkowo sa dostepne funkcje do daty, czasow, itervalow czasowych i inne rzeczy ktore operuja na dacie to dla Ciebie to bez roznicy?


--------------------
Go to the top of the page
+Quote Post
spenalzo
post 3.02.2006, 21:46:40
Post #14





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Cytat
Ta, oczywiscie i nie przejmujesz sie ze zapytanie trwa np 10 s?. Jesli jest typ do tego stworzony i dodatkowo sa dostepne funkcje do daty, czasow, itervalow czasowych i inne rzeczy ktore operuja na dacie to dla Ciebie to bez roznicy?

No faktycznie. Dodawanie/odejmowanie dwóch liczb trwa 10 sekund ohmy.gif

A co do drugiej części: tak, jeżeli wygodniej korzystać mi z rozwiązania jakie podalem wyzej. Naprawde nie wmowisz mi, że odjęcie od jednego pola liczby np. 3600 razy dziesięć tysiecy rekordów jest wolniejsze od wykonania czegoś takiego jak w 1szym poście tutaj.


--------------------

Go to the top of the page
+Quote Post
AndyPSV
post 3.02.2006, 21:50:34
Post #15





Grupa: Zarejestrowani
Postów: 393
Pomógł: 5
Dołączył: 6.02.2003
Skąd: The.Luciferian.Doctrine.p
df

Ostrzeżenie: (30%)
XX---


OK, juz zrozumialem - wstawie date tak jak trzeba, nastepnie po jej pobraniu ja odpowiednio zmodyfikuje. Dzieki chlopaki !

P.S. Przydatne okazaly sie linki:
http://dev.mysql.com/doc/refman/4.1/en/dat...-functions.html
http://dev.mysql.com/doc/refman/4.1/en/string-functions.html

Ten post edytował AndyPSV 3.02.2006, 21:51:42
Go to the top of the page
+Quote Post
SongoQ
post 3.02.2006, 21:52:59
Post #16





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


OK, jesli to taka wygoda dla Ciebie to napisz mi takiego selecta.

Zwroc daty wieksza o 1 miesiac dla dat, ktore mamy w bazie danych.

przykladowe rekordy:
jakis tam rok przestepny 20 luty
jakis tam sobie rok 20 luty

wynik:
... 20 marzec
... 20 marzec

Oczywiscie wygoda wedlug Ciebie?


--------------------
Go to the top of the page
+Quote Post
spenalzo
post 3.02.2006, 22:14:52
Post #17





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Nie wiem co starasz sie udowodnić...

Owszem w takim wypadku jest to mniej wygodne, ale w 99% przypadkach nadal zostane przy swoim rozwiązaniu , do czasu kiedy nie napotkam na ten 1%. Przez ten czas który sie zajmuje tworzeniem skryptów jeszcze się na to nie natknąlem.

A o moją wiedzę na temat funkcji dotyczących daty i czasu w mysqlu sie nie bój.


--------------------

Go to the top of the page
+Quote Post
SongoQ
post 3.02.2006, 22:31:17
Post #18





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Nie wiem co starasz sie udowodnić...

Staram udowodnic Ci to ze po to sa pola do operacji czasowych jak i funkcje przeznaczone.

Cytat
Owszem w takim wypadku jest to mniej wygodne, ale w 99% przypadkach nadal zostane przy swoim rozwiązaniu

Co jest mniej wydajne? Przeciez nic nie napisales, podalem przyklad i myslalem ze podasz mi jakies przyklady - brak argumentow.

Cytat
Przez ten czas który sie zajmuje tworzeniem skryptów jeszcze się na to nie natknąlem.

Heheheh dobre - dla Ciebie lata przestepne i obliczanie tego to 1%? Przeciez to jest powazny problem, no nic przeciez to tylko 1%.

Cytat
A o moją wiedzę na temat funkcji dotyczących daty i czasu w mysqlu sie nie bój.

Wcale sie nie boje. Zapytalem - niestety nie uzyskalem przykladu ktory by to uwzglednil.

Odpowiedz na pytanie jest prosta. Wykorzustujac int jako przechowywanie sekund jest niepoprawne, na tej podstawie nie mozesz operacji robic na datach przynajmniej takiej jaka ja podalem. W takim przypadku musisz np warunkami i podselectem wyliczac lata przestepne i dodawac odpowiednia liczbe do wartosci int.

Dla daty typu timestamp jest to zaledwie wpisanie
  1. + INTERVAL 1 ...
miesiac, dzien, rok, itd
To jest mechanizm wewnetrzny bardzo dobrze dopracowany przez autorow baz danych, nie trzeba zadnych wymyslnych rzeczy jak w Twoim przypadku wprowadzac.

Zwrocilem Ci uwage, ze to nie jest dobry sposob, moge Ci jeszcze wiele przykladow podac, no ale jesli sie uperasz dalej to mozemy dyskusje dalej toczyc, moze osoby przegladajace forum cos wyniosa z tego.

Chciales zaawansowanych rzeczy w MySQL (ostatni post na ktory razem sie wypowadalismy) to teraz slucham (chociaz to jest najprosztrze rzecz bazodanowa zwiazana z data).


--------------------
Go to the top of the page
+Quote Post
spenalzo
post 3.02.2006, 22:41:14
Post #19





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


W 99% przypadkach z jakimi mialem do czynenia wystarczające bylo uzycie liczby do opisu daty.

Najprostszy przyklad:
mam sobie koszyk produktów w sklepie internetowym, no i jak wiadomo, co jakiś czas trzeba go czyścic. Dla mnie najprostszym sposobem jest wykonanie czegoś takiego:
  1. <?php
  2. $czas=time()-7200; // 2 godziny
  3. mysql_query("DELETE FROM koszy WHERE czas < ".$czas);
  4. ?>

i sądzę ze jest to wydajniejsze niż użycie funkcji związanych z datą i czasem.

Nie mówie oczywiście, że NIE MA zastosować gdzie takie coś sie nie sprawdzi.


Cytat
Wykorzustujac int jako przechowywanie sekund jest niepoprawne

Ja bym tego tak nie nazwał tongue.gif Jak już to "czasami nieefektywne" winksmiley.jpg

Ten post edytował spenalzo 3.02.2006, 22:44:18


--------------------

Go to the top of the page
+Quote Post
SongoQ
post 3.02.2006, 22:52:04
Post #20





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Cytat
Nie mówie oczywiście, że NIE MA zastosować gdzie takie coś sie nie sprawdzi.

A jesli przyjdzie Ci cos zrobic gdzie nie masz wyjscia i musisz uzyc operacji na datach to co wtedy przerabiasz baze? Zamast jakiejs daty masz usunac koszyk o dokladnie miesiac i tu zaczyna sie problem. Z doswiadczenia wiem ze jesli jakis typ jest stworzony do czegos to tak sie definiuje. To nie jest moj jakis tam wymysl, to sa mechanizmy i teoria opracowana przez duza liczbe ludzi gdzie sie sprawdza w kazdej bazie danych.


--------------------
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:25